2017-02-16 62 views
-1

我有兩個控制器的登錄和主,當logincontroller驗證用戶然後maincontroller持有控制,我試過這個方法,但沒有工作,userName變量給出了空值。從另一個控制器獲取字符串變量值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); 
} 

maincontroller類:當你的控制器得到由FXMLLoader初始化

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'? – nafas

+0

你在哪裏設置'user'字段? –

+0

是的,看看登錄控制器類我已經設置 –

回答

1

initialize()方法正在運行,就在這裏:

adminLoader.load(); 

很顯然,在您通過登錄控制器之前會發生這種情況,這就是您嘗試訪問用戶時看到NullPointerException的原因。

移動數據庫代碼到一個單獨的方法,例如loadUser,並手動調用它:

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

是的,這實際上是導致問題,所有的代碼是完美的,只是我有一段時間後初始化我的數據庫代碼,所以我解決了我的問題與Platform.runlater( –

+0

順便說一句謝謝D –

+0

不客氣: ) – Dth

0

當然,這將是null,你loginController類已經被關閉,當你試圖獲取信息從中。

我很想念你的類延伸的JavaFXApplication類並實現launch方法...

應設置用戶名/密碼變量在loginController下了課測試,並獲得了成功登錄 - 這樣,如果失敗並且您確定用戶名/密碼正確,您將保持窗口(舞臺)打開。

相關問題