我在尝试运行可执行jar文件时遇到错误。
lis 09, 2014 8:20:34 PM com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged WARNING: Resource "/styles.css" not found.
当我从IDE运行应用程序时,一切正常。我尝试了几种解决方案,但都没有效果。
1
scene.getStylesheets().add(getClass().getResource("/styles.css").toExternalForm());
2
scene.getStylesheets().add("styles.css");
第3
scene.getStylesheets().addAll(new File("/styles.css").toURI().toString());
4
InputStream inputStream = MainApp.class.getResourceAsStream("/styles.css");
File tempStyleSheetDest = File.createTempFile("javafx_stylesheet", "");
tempStyleSheetDest.deleteOnExit();
Files.copy(inputStream, tempStyleSheetDest.toPath(), StandardCopyOption.REPLACE_EXISTING);
scene.getStylesheets().add(tempStyleSheetDest.toURI().toString());
另一个类似的。我奋斗了几个小时,我没有更多的想法。 我正在使用 maven,java1.8_u20 。
答案 0 :(得分:1)
尝试
scene.getStylesheets().add(getClass().getResource("styles.css").toExternalForm());
没有' /'在开始......
答案 1 :(得分:1)
如果您使用的是maven,请务必正确设置资源文件夹。创建一个资源文件夹并复制您的 style.css 文件,然后将这样的内容添加到您的pom.xml中:
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>resources</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
您必须确保 style.css 文件最终位于您使用getClass()。getResource()方法请求的位置的jar内(这通常是内部的相对路径)类包文件夹,如果在前面添加“/”,则为绝对文件夹。在Jens-Peter Haack的辩护中,读取这个(来自getResource()javadoc):
“如果名称以'/'('\ u002f')开头,则绝对名称为 资源是'/'后面的名称部分。除此以外, 绝对名称具有以下形式: modified_package_name / name其中modified_package_name是 这个对象的包名称用'/'代替'。' ( '\ u002e')“。 https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getResource-java.lang.String-
因此,如果您坚持使用文件名前面的'/',请确保您的 style.css 文件最终位于您的jar文件的根目录中,如果没有,请确保它最终相对于jar中类位置的路径。
答案 2 :(得分:0)
我的带有CSS的示例可执行jar:
通过此文件管理,我做到了,并解决了您的问题。
src
|-drawable
| |-bg.png
|
|-javaClass
| |-mainApp.java
| |-myStyle.css
|
设置外部CSS文件:
scene.getStylesheets().add(getClass().getResource("myStyle.css").toExternalForm());
在其他目录中获取外部图像:
-fx-background-image: url('../drawable/bg.png');