我得到以下结构:
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"
...
答案 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"
詹姆斯对你的问题的另一部分与路径解析的答案是正确的。