2017-02-16 130 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下了课测试,并获得了成功登录 - 这样,如果失败并且您确定用户名/密码正确,您将保持窗口(舞台)打开。

相关问题