2016-08-02 11 views
0

複数のFXMLファイルを読み込み、それぞれのコントローラにメンバーを設定しようとしています。しかし、いくつかの不思議なケースでは、ロードされたFXMLのコントローラーを指すことができません。最初は、「Initialize」を実装しているコントローラだと思っていましたが、いくつかのテストの後ではそうではありません。新しく読み込まれたFXMLのJavaFXコントローラのアドレスを指すことができません

public void showLoginScreen() { 
    try { 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/Login.fxml")); 
     mMainScene.setRoot((Parent) loader.load()); 
     LoginController controller = loader.<LoginController>getController(); 
     //I am able to reach the controller from here 
     controller.initManager(this); 
    } catch (IOException ex) { 
     Logger.getLogger(ControllerManager.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

public void showMainView(String sessionID) { 
    try { 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/Main.fxml")); 
     mMainController = loader.<MainController>getController(); 
     mMainScene.setRoot((Parent) loader.load()); 
     //TODO : I am not able to reach the controller from here 
     System.out.println("pointer adress = " + mMainController); 
     mMainController.initManager(this); 
    } catch (IOException ex) { 
     Logger.getLogger(ControllerManager.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

コアスタック:ここ

は、いくつかのコードとコアスタックである第2のケースで

pointer adress = null 

Caused by: java.lang.NullPointerException 
    at controller.ControllerManager.showMainView(ControllerManager.java:40) 
    at view.LoginController.handle(LoginController.java:49) 
    ... 58 more 

答えて

1

、あなたはFXMLをロードする前に、コントローラを取得しようとしています。コントローラクラスはFXMLファイルで定義されているため、FXMLがロードされるまでローダはそのインスタンスをインスタンス化できません。

ただ、メソッド呼び出しの順序を変更します。

public void showMainView(String sessionID) { 
    try { 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/Main.fxml")); 
     // mMainController = loader.<MainController>getController(); 
     mMainScene.setRoot((Parent) loader.load()); 

     mMainController = loader.<MainController>getController(); 

     System.out.println("pointer adress = " + mMainController); 
     mMainController.initManager(this); 
    } catch (IOException ex) { 
     Logger.getLogger(ControllerManager.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 
+0

テストおよび検証、感謝(...答えを受け入れるように9分以上が必要です) –

関連する問題