使用JavaFX抛出NullPointer异常

时间:2016-08-14 21:11:45

标签: java javafx scenebuilder

当我调用变量empName时,我的应用程序抛出了NullPointer异常。

            ResultSet result = stmnt.executeQuery("select FirstName, LastName from emp_info where EmployeeID "
                    + "= '" + empID + "'");

//            while(result.next()){
//                empName.setText("result.getString(1));
//            }
            empName.setText("asdf");
            rootLayout.setCenter(controlData);

            connection.close();
        }

    }

它应该能够正常运行,因为我初始化Text变量,如下所示:

@FXML
public Text empName;

当我使用scenebuilder时,它有时会显示fx:id empName,但是当我退出它并重新打开它时它不会显示它。我认为这就是问题所在。我的xml文件是:

<AnchorPane prefHeight="300.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="studentempsignin.MainPage_Controller">
   <children>
      <BorderPane prefHeight="300.0" prefWidth="500.0">
         <center>
            <Text fx:id="empName" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" BorderPane.alignment="CENTER" />
         </center>
      </BorderPane>
   </children>
</AnchorPane>

我得到的例外是:

SEVERE: null
java.lang.NullPointerException
    at studentempsignin.MainPage_Controller.signingIn(MainPage_Controller.java:190)
    at studentempsignin.SignIn_Controller.lambda$0(SignIn_Controller.java:66)
    at studentempsignin.SignIn_Controller$$Lambda$143/575703892.handle(Unknown Source)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)

编辑:

单击signIn按钮时调用empIDAccess方法:

signInBtn.setOnAction((e) -> {
            try {
                //used dbaseDriver...idk why
//                DBaseDriver connect = new DBaseDriver("jdbc:mysql://localhost:3306/AUStudentEmployees",
//                        "kheneahm", "kennygoham");
                String empID = empIDField.getText();
                MainPage_Controller empIDAccess = new MainPage_Controller();
                empIDAccess.signingIn(empID, invalidID, signInBtn);
            } catch (Exception ex) {
                Logger.getLogger(SignIn_Controller.class.getName()).log(Level.SEVERE, null, ex);
            }

        });

1 个答案:

答案 0 :(得分:0)

您正在创建一个新的控制器实例。 FXMLLoader创建一个控制器实例,并在加载FXML文件时初始化该实例中的@FXML - 带注释的字段。这些字段不会在您创建的新实例中初始化(即使它们是,它们也不会引用UI中显示的相同对象)。

您需要get a reference to the controller that is created when you load the FXML