javafx找到正确的道路

时间:2014-04-20 22:56:07

标签: java path javafx

我得到以下结构:

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

我在ContentManager中设置fxml-Files,如:

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

但是我总是得到一个nullPointerException。而且我不想使用绝对路径。那么如何找出相对路径呢? 是否正确设置fxml文件的控制器:

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

...

2 个答案:

答案 0 :(得分:3)

部署应用程序时,通常会创建一个包含类文件和所有资源的jar文件。您需要从jar文件中加载fxml文件,即作为资源加载。在这种情况下,路径元素" .."并不是什么意思。

使用

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

(路径相对于类路径)。

当然用

加载它
FXMLLoader loader = new FXMLLoader(getClass().getResource(DEFAULT_SCREEN_FXML));

或类似的东西。

答案 1 :(得分:3)

  

将fxml文件的控制器设置为... fx:id是不正确的??

不,这完全错了。您应该使用fx:controller设置控制器,而不是fx:id

fx:id用于将控制器中的@FXML元素映射到FXML文档中定义的元素,而不是用于映射控制器类本身。

有关详细信息,请参阅Introduction to FXML文档。

所以,不要使用:

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

改为使用:

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

詹姆斯对你的问题的另一部分与路径解析的答案是正确的。