我正在尝试将控制器的实例传递给另一个控制器,但它返回null

时间:2018-11-15 10:24:05

标签: java javafx fxml

我有一个控制器,它通过加载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的值。 我在这里想念什么吗?谢谢您的帮助

0 个答案:

没有答案