2014-04-20 47 views
0

我獲得以下結構: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檔案設置,如:

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

,但我得到八方通一個NullPointerException 。我不想用絕對路徑工作。那麼如何找出相對路徑呢? 而且是正確設置FXML文件用的控制器:

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

回答

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

或類似的東西加載它。

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" 

詹姆斯對你的問題做路徑解析的另一部分答案是正確的。

+0

啊對不起,你是對的。我的意思是FX:控制器!但謝謝:) – malex