I am working in NetBeans 8, with Java 8 / JavaFX and FXML.
In the first controller (an AnchorPane) in my FXML document, I have this, that works:
However, when I attempt to replace that with any type of relative path, I get the following error at runtime:
com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged WARNING: Resource "myStyle.css" not found.
stylesheets="myStyle.css" stylesheets="file://myStyle.css" stylesheets="./myStyle.css" stylesheets="css/myStyle.css"
(where I put a copy of the css file in a subdirectory from where it was)
...and maybe 50 other permutations. Every time I get the same error.
The reason I care is that I am having a second problem. In the first version, that works on my machine... when I take my jar file to another machine, the css is not applied when the application is run... It's like the resource file isn't copied.
Let me consider your project structure as follows
MyApp | |_ src | |_controllers (Controllers) |_view (FXML) |_style (css) |_myStyle.css
You can specific the relative path in the FXML using
<stylesheets> <URL value="@../style/myStyle.css" /> </stylesheets>
In your controller, you can add it as follows
This is how it works for me:
<?import java.net.*?> <fx:root type="javafx.scene.layout.BorderPane" ... xmlns:fx="http://javafx.com/fxml"> <stylesheets> <URL value="@myStyle.css" /> </stylesheets> </fx:root>
The css file is in the same package (folder) as the FXML. Also my root happens to be
<fx:root>, I expect it to work the same for your
Check out the docs, search for "Location Resolution" for details.