简体   繁体   中英

Not loading css file in executable jar javafx8

I am getting an error while I try to run executable jar file.

lis 09, 2014 8:20:34 PM com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged WARNING: Resource "/styles.css" not found.

When I'm running application from IDE, everything is OK. I try a several solution, but neither worked.

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());

And another similar. I struggle this a few hours and I have no more ideas. I'm using maven, java1.8_u20 .

Try

scene.getStylesheets().add(getClass().getResource("styles.css").toExternalForm());

without the '/' in the beginning...

If you are using maven, make sure to setup your resources folder correctly. Create a resource folder and copy your style.css file inside then add something like this to your pom.xml:

    <resources>
        <resource>
            <directory>src</directory>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>resources</directory>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
    </resources>

You have to make sure that the style.css file ends up inside the jar in the location you are requesting with the getClass().getResource() method (that's usually a relative path inside the class package folders or an absolute one if you add the "/" at the front). In Jens-Peter Haack defense, read this (from the getResource() javadoc) :

"If the name begins with a '/' ('\/'), then the absolute name of the resource is the portion of the name following the '/'. Otherwise, the absolute name is of the following form: modified_package_name/name Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\.')." https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getResource-java.lang.String-

So if you stick with the '/' at the front of the filename make sure your style.css file ends up in the root of your jar file, if not make sure it ends up in a path relative to the class location inside your jar.

My sample executable jar with CSS:

Sample Output

through this file management, I did and resolve your problem. src |-drawable | |-bg.png | |-javaClass | |-mainApp.java | |-myStyle.css |

set external CSS file: scene.getStylesheets().add(getClass().getResource("myStyle.css").toExternalForm());

get external Image in other directory: -fx-background-image: url('../drawable/bg.png');

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM