2016-12-16 47 views
0

我需要從一個JavaFX CONTROLER開放JavaFX的窗口是相對路徑

Stage graphStage = new Stage(); 
    FXMLLoader loader = new FXMLLoader(); 
    fenetre = new File("../graph/graph.fxml"); 
    if (!fenetre.exists()) { 
     System.out.println("fichier inexistant"); 
    } else { 
     Pane rootGraph = loader.load(getClass().getResource(fenetre.getPath()).openStream()); 
     GraphController controller = (GraphController) loader.getController(); 
     controller.getSystemChoice(id); 
     Scene sceneGraph = new Scene(rootGraph); 
     sceneGraph.getStylesheets().add(getClass().getResource("myStyle.css").toExternalForm()); 

     graphStage.setTitle("Graphe"); 
     graphStage.setScene(sceneGraph); 
     graphStage.show(); 
    } 

代碼不fincd文件,如何達到這個文件打開一個窗口FXML?

controler is on: cloud/composant/controler.java 
my fxml is on: cloud/graph/graph.fxml 

回答

1

要麼從文件中獲取數據,要麼使用資源。

不要試圖將兩種方法結合起來。它們往往不相容。

// assuming here the file path is correct 
FXMLLoader loader = new FXMLLoader(fenetre.toURI().toURL()); 
... 
Pane rootGraph = loader.load(); 

如果該文件是一種資源,你應該更喜歡將其加載爲資源,但:

// assuming cloud is positioned in the "classpath root" 
FXMLLoader loader = new FXMLLoader(getClass().getResource("/cloud/graph/graph.fxml")); 
+0

同樣的錯誤仍然存​​在,我已經提到帖子上的路徑,是符號是否正確? – devhicham

+0

@devhicham相對路徑意味着它是相對的...相對於你沒有提到的工作目錄。資源應該更好地存儲爲資源,儘管在這種情況下,第二種方法應該可以工作,假設「cloud」直接存儲在「包根」中,並且以包含類路徑中資源的方式運行rpogram ... – fabian

+0

謝謝^ _ ^,我已經添加了測試文件,所以我可以找到錯誤的原因 – devhicham