У меня есть контроллер, который получает данные от другой (страницы входа) через загрузку его 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.Я что-то здесь упускаю?Спасибо за помощь