2017-02-16 29 views
-1

logincontrollerがユーザを検証してからmaincontrollerがコントロールを保持しているときに、私はこのメソッドを試しましたが動作していない、userName変数がnull値を返します。他のコントローラから文字列変数の値を取得するjavafx

logincontrollerクラス:

public class loginController implements Initializable{ 

    private String user; 
    public String getUser() { 
     return user; 
    } 


if((user.equals(loginUsername.getText()) && (pwd.equals(loginPassword.getText())))){ 
      switch(role){ 
       case "Admin": Stage adminStage=new Stage(); 
      FXMLLoader adminLoader = new FXMLLoader(getClass().getResource("/FXML/Admin/Admin.fxml")); 
      Parent adminRoot = adminLoader.load(); 
      AdminController adminController = (AdminController)adminLoader.getController(); 
      adminController.setLoginController(this); 
} 

メインコントローラクラス:

public class AdminController implements Initializable { 
    @FXML 
    private Label userName; 

    public void setLoginController(LoginController loginController) { 
     this.loginController = loginController; 
    } 

    public void initialize(URL url, ResourceBundle rb) { 
     loginController =new LoginController(); 

     try { 
      db = new DBConnector(); 
//   String user = loginController.getUser(); 
      System.out.println(user); 
      String query = "SELECT u_full_name,img FROM Users WHERE u_username='"+user+"'"; 
      db.setResultSet(query); 
      while(db.getResultset().next()){ 
       userName.setText(db.getResultset().getString(1)); 
       imageUpload.setImage(new Image("file:"+db.getResultset().getString(2))); 
      } 
     } catch (SQLException e) { 
      JOptionPane.showMessageDialog(null, "can't retreive photo",e.toString(),0); 
     } 

} 
+0

あなたは 'setLoginController'をどこでもurコードで使用しますか? – nafas

+0

'user'フィールドはどこで設定しますか? –

+0

はい、logincontrollerのクラスを見てくださいすでに –

答えて

1

お使いのコントローラがFXMLLoaderによって初期化されるときinitialize()方法は右ここに、実行されている:

adminLoader.load(); 

これは明らかにログインコントローラに合格する前に発生します。そのため、ユーザーにアクセスしようとするとNullPointerExceptionが表示されます。あなたが情報を取得しようとしているとき、あなたのloginControllerクラスがすでに閉じられている、それはnullなり、もちろん

adminController.setLoginController(this); 
adminController.loadUser(); 
+0

はい、それは実際に問題を引き起こしていた、すべてのコードは、私はちょっと後に私のデータベースのコードを初期化しなければならなかったので、私はPlatform.runlater( –

+0

で私の問題を解決しました完璧です –

+0

歓迎: ) – Dth

0

は、たとえば loadUserのために、別の方法に、データベースのコードを移動し、それを手動で起動する

それから。

私は...

のJavaFXApplicationクラスを拡張し、launchメソッドを実装するクラスをしないのです、あなたが成功したログインをテストし、受信した後に、loginControllerクラスにユーザー名/パスワードを変数を設定する必要があります - この方法では、失敗するとユーザー名/パスワードが正しいことを確認しても、ウィンドウ(ステージ)を開いたままにしておきます。

関連する問題