不在可执行jar javafx8中加载css文件

时间:2014-11-09 21:02:46

标签: java javafx

我在尝试运行可执行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

3 个答案:

答案 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_pa​​ckage_name / name其中modified_pa​​ckage_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:

Sample Output

通过此文件管理,我做到了,并解决了您的问题。 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');