我目前在JavaFX中加载CSS和图像时遇到了一个主要问题。
目标是让JavaFX加载CSS文件中定义的图像。我可以在IDE和独立执行中轻松地使用它。但是,一旦我将应用程序作为applet运行并在浏览器上下文中运行,一切都会失败。
CSS文件仍然正常加载,但图像文件仍为空白。遗憾的是,我无法找到一种方法来使JavaFX记录为什么图像加载失败。所有图像都位于CSS文件位置的子目录中,例如:
.button-gray {
-fx-border-image-source: url("button/buttongray.png");
}
CSS文件与处理加载它的类位于同一个包中,并且加载如下:
final URL css = Util.class.getResource("sheet.css");
if (css != null) {
parent.getStylesheets().add(css.toExternalForm());
}
我尝试将资源放在根目录中,然后使用Util.class.getClassLoader.getResource(...)
和Thread.currentThread().getContextClassLoader.getResource(...)
加载它。如果应用程序独立执行,两者都可以正常工作。如果从webstart applet上下文启动应用程序,则两者都不起作用。
但正如我所说。在所有情况下都没有迹象表明CSS没有加载。样式表中定义的样式将正确应用,但图像除外。
我想知道这是什么原因。我使用shemnon的gradle javafx插件打包并发布应用程序。
建筑环境:
任何人都知道如何解决此问题或知道如何调试它。 遗憾的是,JavaFX(甚至CSS Logger)和applet跟踪控制台的日志记录功能都没有说明问题所在。
新信息!
JNLP文件位于: JNLP-File
但是,这个文件不是问题。问题似乎是生成二进制css文件,该文件是JavaFX for webstart部署过程的一部分。在这个二进制文件中,由于某些未知原因,通过构建环境引用了CSS文件。这会导致CSS加载程序从我的构建服务器上的位置加载图像文件。在我的本地计算机上无效的东西。另一方面,我在本地计算机上进行的构建工作因为文件仍在其寻找的位置。
所以现在问题似乎仅限于存储完全错误的文件引用的二进制css生成。
答案 0 :(得分: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/
答案 1 :(得分:0)
您是否尝试使用以下命令加载css文件:
final String css = getClass.getResource("sheet.css").toExternalForm();
parent.getStylesheets.add(css); // taken that parent is the name for the Scene.
对于css:
-fx-border-image-source: url("../button/buttongray.png");
使用URL和Util.class并不常用于加载样式表afaik。
也许尝试使用NetBeans IDE 7.4。我个人不知道Gradle。