在制作jar时,图像未从资源文件夹中的javafx css中加载

时间:2016-12-13 00:08:07

标签: java javafx-8

project 
  src/main/java
  src/main/resources  css & img

上面是我基于maven的javafx app结构。该应用程序无法从runnable jar文件加载图像。 示例-fx-background-image: url("../img/bg.PNG");

Error loading image: jar:file:/D:/demo.jar!/img/top_bg.PNG

1 个答案:

答案 0 :(得分:1)

要检查的事项

仔细检查您要查找的文件是否实际位于您尝试运行的jar文件中,并且它位于您期望的位置(运行jar tvf <yourjarfile.jar>进行检查)。

另外,请仔细检查以确保您没有输入错字,例如您提到url("../img/bg.PNG")但显示的错误消息是top_bg.PNG,因此错误消息中的文件名与示例中的文件名不匹配。

此外,来自JavaFX CSS reference

  

请注意,对于内联样式,前导点段(例如'..''.')会解析,因为路径始终锚定在类路径的根目录上。

因此,此类表示法仅适用于样式表,而不是内联样式。

<强>除了

通常,在尝试从jar文件中检索资源时,请不要使用..

http:file:协议不同,jar: protocol无法解析包含..的相对父地址。

我确实在本地进行了一些测试,并且JavaFX中的CSS实现似乎解决了来自jar文件的资源的URL中的..说明符,因此这似乎不是问题。可能CSS实现正在预处理..以将其从url中删除,然后将其传递给url加载器以加载资源。 (我检查了JavaFX CSS解析器的源代码,这就是它的作用,所以..在从jar派生的CSS样式表中使用时很好。