2016-08-14 20 views
0

変数empNameを呼び出すと、アプリケーションでNullPointer例外がスローされます。JavaFXで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(); 
     } 

    } 

私はそうのようなテキスト変数を初期化するので、正常に動作することができるはず:私はscenebuilderを使用する場合

@FXML 
public Text empName; 

はまた、それは時々FX示しています。id EMPNAMEにするが、ときのうちI終了それを再開してもそれは表示されません。私は問題がどこにあるのだろうと思う。私の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) 

編集:

私がサインイン]ボタンをクリックしたときに、メソッド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); 
      } 

     }); 
+0

確かに、初期化されていないものがあります。 – Danieboy

+0

詳細を表示してください。どうやら、あるコントローラのメソッドを別のコントローラから呼び出していますか? –

+0

scenebuilderでIDフィールドが表示されないこともありますか? –

答えて

0

新しいコントローラインスタンスを作成しています。 FXMLLoaderは、コントローラインスタンスを作成し、FXMLファイルをロードするときに、そのインスタンスの@FXMLという名前のフィールドを初期化します。これらのフィールドは、作成した新しいインスタンスでは初期化されません(たとえそうであったとしても、UIに表示される同じオブジェクトを参照しません)。

get a reference to the controller that is created when you load the FXMLが必要です。

関連する問題