我有一个控制器,它通过加载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);
}
以及FXMLDocument.fxml的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行返回null this.user = userMainController.getUser(); (这是UserMainController内部的一个函数,用于获取来自登录控制器的数据。)
并尝试使用netbeans的内置调试器后,我发现tab1.init(this)和tab3.init(this)包含它们是控制器的实例,因为当我将鼠标悬停在它上面时会显示一个值,对于tab2.init(this)为null。删除tab2.init(this)并将其包含在fxml文件中不会导致任何错误,因此得出的结论是tab3是有错误的。但是我似乎找不到。包含tab1.init ...... tab3.init(this);在Platform.runLater内部,也会导致空指针异常,因为tab3.initialize将查找来自usermaincontroller的值。 我在这里想念什么吗?谢谢您的帮助