JavaFX在Webstart中从CSS加载图像
我目前在JavaFX中加载CSS和图像时遇到了一个主要问题 目标是让JavaFX加载CSS文件中定义的图像。我可以在IDE和独立执行中轻松实现这一点。但一旦我尝试将应用程序作为applet并在浏览器上下文中运行它,一切都失败了 CSS文件仍然正确加载,但图像文件保持空白。遗憾的是,我找不到一种方法来记录为什么图像加载失败。所有图像都位于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
.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
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文件时失败,因为它不正确支持名称空间。