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
答案 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样式表中使用时很好。