JavaFX从Webstart中的CSS加载图像

Nit*_*ram 5 css java applet javafx java-web-start

我目前在JavaFX中加载CSS和图像时遇到了一个主要问题.

目标是使JavaFX加载CSS文件中定义的图像.我可以在IDE和独立执行中轻松地使用它.但是,一旦我将应用程序作为applet运行并在浏览器上下文中运行,一切都会失败.

CSS文件仍然正确加载,但图像文件仍为空白.遗憾的是,我无法找到一种方法来使JavaFX记录为什么图像加载失败.所有图像都位于CSS文件位置的子目录中,例如:

.button-gray {
    -fx-border-image-source: url("button/buttongray.png");
}
Run Code Online (Sandbox Code Playgroud)

CSS文件与处理加载它的类位于同一个包中,并且加载如下:

final URL css = Util.class.getResource("sheet.css");
if (css != null) {
    parent.getStylesheets().add(css.toExternalForm());
}
Run Code Online (Sandbox Code Playgroud)

我试着已经把资源在根目录下,并加载它Util.class.getClassLoader.getResource(...)Thread.currentThread().getContextClassLoader.getResource(...).如果应用程序独立执行,两者都可以正常工作.如果从webstart applet上下文启动应用程序,则两者都不起作用.

但正如我所说.在所有情况下都没有迹象表明CSS没有加载.样式表中定义的样式将正确应用,但图像除外.

我不知道这是什么原因.我使用shemnon的gradle javafx插件打包并发布应用程序.

建筑环境:

  • Oracle Java 1.7b45 x64
  • Gradle 1.9

任何人都知道如何解决这个问题或知道如何调试它.遗憾的是,JavaFX(甚至是CSS Logger)和applet跟踪控制台的日志记录功能都没有说明问题所在.

新的消息!

JNLP文件位于: JNLP-File

但是,这个文件不是问题.问题似乎是生成二进制css文件,该文件是JavaFX for webstart部署过程的一部分.在这个二进制文件中,由于某些未知原因,通过构建环境引用了CSS文件.这会导致CSS加载程序从我的构建服务器上的位置加载图像文件.在我的本地计算机上无效的东西.另一方面,我在本地计算机上进行的构建工作因为文件仍在其寻找的位置.

所以现在问题似乎仅限于存储完全错误的文件引用的二进制css生成.

Bon*_*les 0

1)您可以发布您用于部署应用程序的 .jnlp 文件吗?不正确的 .jnlp 可能会导致此类资源加载问题。

2) 向我们提供您正在使用的 Thread.currentThread().getContextCLassLoader.getResource("") 的确切调用。

3) 报告 .jar 文件的内容,以及您需要加载的 jar 中文件的确切文件夹/路径结构。例如,“我的代码正在寻找 example.png,它应该位于 com/mycompany/myimages 文件夹内的 pics.jar 文件中”,类似的内容。

WebStart 需要做一些工作才能工作,但我怀疑答案就在那里。如果一切都失败了,我发现 JaNeLa 对于调试 Web 启动部署问题很有帮助。http://pscode.org/janela/