JavaFX在Webstart中从CSS加载图像

JavaFX在Webstart中从CSS加载图像,java,css,applet,javafx,java-web-start,Java,Css,Applet,Javafx,Java Web Start,我目前在JavaFX中加载CSS和图像时遇到了一个主要问题 目标是让JavaFX加载CSS文件中定义的图像。我可以在IDE和独立执行中轻松实现这一点。但一旦我尝试将应用程序作为applet并在浏览器上下文中运行它,一切都失败了 CSS文件仍然正确加载,但图像文件保持空白。遗憾的是,我找不到一种方法来记录为什么图像加载失败。所有图像都位于CSS文件位置的子目录中,例如,可以这样访问: .button-gray { -fx-border-image-source: url("button/b

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

目标是让JavaFX加载CSS文件中定义的图像。我可以在IDE和独立执行中轻松实现这一点。但一旦我尝试将应用程序作为applet并在浏览器上下文中运行它,一切都失败了

CSS文件仍然正确加载,但图像文件保持空白。遗憾的是,我找不到一种方法来记录为什么图像加载失败。所有图像都位于CSS文件位置的子目录中,例如,可以这样访问:

.button-gray {
    -fx-border-image-source: url("button/buttongray.png");
}
final URL css = Util.class.getResource("sheet.css");
if (css != null) {
    parent.getStylesheets().add(css.toExternalForm());
}
CSS文件与处理加载的类位于同一个包中,加载方式如下:

.button-gray {
    -fx-border-image-source: url("button/buttongray.png");
}
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小程序上下文启动的,则两者都不起作用

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

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

建筑环境:

  • Oracle Java 1.7b45 x64
  • 梯度1.9
任何人都知道如何解决这个问题,或者知道如何调试它。 遗憾的是,JavaFX(甚至CSS记录器)的日志记录功能和applet跟踪控制台都没有指出问题所在

新信息

JNLP文件位于此处:

然而,这个文件不是问题所在。问题似乎在于二进制css文件的生成,该文件是JavaFXforWebStart部署过程的一部分。在这个二进制文件中,由于一些未知的原因,在by building环境中有一个对CSS文件的引用。这会导致CSS加载程序从我的建筑服务器上的位置加载图像文件。在我的本地计算机中不起作用的东西。另一方面,我在本地计算机上所做的构建是有效的,因为文件仍在其查找的位置

因此,现在的问题似乎仅限于存储完全错误的文件引用的二进制css生成。

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

2) 给出您正在使用的Thread.currentThread().getContextCLassLoader.getResource(“”)的确切调用

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


WebStart需要做一些工作才能开始工作,但我怀疑答案就在那里的某个地方。如果所有这些都失败了,我发现JaNeLa在调试web start部署问题方面很有帮助

您是否尝试使用以下内容加载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。

我可能是在说显而易见的事情,但以防万一:您已经验证了WebStart下载的JAR确实包含图像?通常是显而易见的事情导致了这些问题。但在这种情况下不是这样。是的,我检查了文件是否在JAR中,它们是否在那里。我甚至检查了WebStart缓存中的文件。似乎没有人知道。有人知道从CSS文件加载图像的JavaFXWebStart应用程序的工作示例吗?我尝试了第一个。第二个在所有情况下都会失败,因为文件不在那里。如果您在本教程中使用imageview尝试这样做会怎么样。不确定css是否是图像使用的方式。我编辑了我的问题,添加了我发现的新信息。这些图像基本上起作用。但是一旦CSS转换成二进制CSS,一切都会出错。然后你需要在样式表中包含Base64编码的url,而不是常规路径。也许本文有帮助:您提供的链接显示了如何将图像数据编码为二进制文件到CSS文件中。在我的情况下,这不是一个可能的解决方案,也不能解决CSS到BSS对话的错误文件路径处理的实际问题。JaNeLa在处理JavaFX jnlp文件时失败,因为它不正确支持名称空间。