Question

I get following structure:

project
|---+build
|---+dist
|---+nbproject
|----src
|-------client
|----------stuff
|-------------controller
|----------------DefaultController.java
|-------------files
|-------------fxml
|----------------DefaultFXML.fxml
|-------------img
|-------------lib
|---------------ContentManager.java
|-------------root
|---------------StartClass.Java
|---+build.xml
|---manifest.mf

I'm setting in the ContentManager the fxml-Files like:

public static final String 
        DEFAULT_SCREEN_FXML = "../fxml/Default.fxml";

But i get allways a nullPointerException. And i dont want to work with absolute Path. So how to finde out the relative path? And is it right to set the controller of the fxml-file with:

fx:id="client.stuff.controller.DefaultController"

??

Was it helpful?

Solution

When you deploy your application, you typically create a jar file which includes the class files and all the resources. You need to load the fxml file from inside the jar file, i.e. as a resource. In this context, the path element ".." doesn't really mean anything.

Use

public static final String 
        DEFAULT_SCREEN_FXML = "/client/stuff/fxml/Default.fxml";

(the path is relative to the classpath).

and of course load it with

FXMLLoader loader = new FXMLLoader(getClass().getResource(DEFAULT_SCREEN_FXML));

or something similar.

OTHER TIPS

is it right to set the controller of the fxml-file with...fx:id...?

No, this is totally wrong. You should set the controller using fx:controller, not fx:id.

fx:id is for mapping @FXML elements in controllers to elements defined in an FXML document, it is not for mapping the controller class itself.

Refer to the Introduction to FXML document for more information.

So, don't use:

fx:id="client.stuff.controller.DefaultController"

Instead use:

fx:controller="client.stuff.controller.DefaultController"

James's answer for the other part of your question to do with path resolution is correct.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top