Я пытаюсь передать экземпляр моего контроллера другому контроллеру, но он возвращает ноль - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть контроллер, который получает данные от другой (страницы входа) через загрузку его fxml

fxmlLoader = new FXMLLoader(UserMainController.class.getResource("FXMLDocument.fxml"));

                //User
                Parent userParent = (Parent) fxmlLoader.load();
                userController = fxmlLoader.<UserMainController>getController();
                userController.setUser(userID, collegeID, username, password, key);
                Scene userScene = new Scene(userParent);

                //get stage information
                Stage window = (Stage) ((Node)event.getSource()).getScene().getWindow();

                window.setScene(userScene);
                window.show();

, это работает нормально.Внутри контроллера FXMLDocument.fxml (который я загружаю выше) я пытаюсь передать его экземпляр другим контроллерам

@Override
public void initialize(URL url, ResourceBundle rb) {
        tab1.init(this);
        tab2.init(this);
        tab3.init(this);
}

, а также внутри fxml FXMLDocument.fxml, они включенывот так

                       <BorderPane fx:id="tab1BP">
                       <center>
                           <fx:include fx:id="tab1" source="Tab1/tab1.fxml"/>
                       </center></BorderPane>



                         <BorderPane fx:id="tab2BP" prefHeight="200.0" prefWidth="200.0">
                         <center>
                             <fx:include fx:id="tab2" source="Tab2/tab2.fxml"/>
                         </center></BorderPane>



                         <BorderPane fx:id="tab3BP">
                         <center>
                             <fx:include fx:id="tab3" source="Tab3/tab3.fxml"/>
                         </center>
                         </BorderPane>

Я получаю сообщение об ошибке в строке tab3.init (this);

Caused by: java.lang.NullPointerException
at ara_thesis.User.UserMainController.initialize(UserMainController.java:149)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
... 61 more

, а функция инициализации tab3 выглядит следующим образом

@Override
public void initialize(URL url, ResourceBundle rb) {
    Platform.runLater(() -> {
        this.user = userMainController.getUser();
        try {
            initializeProgramTable();
        } catch (SQLException ex) {
            Logger.getLogger(CourseSectionController.class.getName()).log(Level.SEVERE, null, ex);
        }
    });

возвращает ноль в строке 149, то есть this.user = userMainController.getUser ();(это функция внутри UserMainController, которая получает данные, поступившие от контроллера входа в систему.)

, а также после попытки встроенного отладчика для сетевых компонентов, я обнаружил, что tab1.init (this) и tab3.init (this) содержит экземпляр контроллера, так как есть значение, отображаемое, когда я над ним висел, и null для tab2.init (this).Удаление tab2.init (this) и удаление его из файла fxml не приведет к ошибкам, поэтому я пришел к выводу, что tab3 - это ошибка.Но я не могу найти это.Вложение tab1.init ...... tab3.init (это);внутри Platform.runLater также приведет к исключению нулевого указателя, так как tab3.initialize будет искать значение, которое будет поступать от usermaincontroller.Я что-то здесь упускаю?Спасибо за помощь

...