从另一个控制器javafx获取字符串变量值

时间:2017-02-16 12:27:45

标签: java javafx

我有两个控制器登录和主,当logincontroller验证用户然后maincontroller持有控件,我尝试了这个方法,但不工作,userName变量给出null值。

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);
        }

}

2 个答案:

答案 0 :(得分:1)

当您的控制器由FXMLLoader初始化时,正在运行adminLoader.load(); 方法,就在这里:

NullPointerException

显然,这是在您通过登录控制器之前发生的,这就是您在尝试访问用户时看到loadUser的原因。

将数据库代码移动到单独的方法,例如adminController.setLoginController(this); adminController.loadUser(); ,并手动调用它:

{{1}}

答案 1 :(得分:0)

当然,它会是null,当您尝试从中获取信息时,您的loginController课程已经关闭。

我错过了扩展 JavaFX Application类并实现launch方法的类......

您应该在测试完成后loginController类中设置 userName / password 变量并成功登录 - 这样,如果窗口(阶段)失败,您将保持窗口(阶段)打开你确定用户名/密码是正确的。