我有两个控制器登录和主,当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);
}
}
答案 0 :(得分:1)
当您的控制器由FXMLLoader
初始化时,正在运行adminLoader.load();
方法,就在这里:
NullPointerException
显然,这是在您通过登录控制器之前发生的,这就是您在尝试访问用户时看到loadUser
的原因。
将数据库代码移动到单独的方法,例如adminController.setLoginController(this);
adminController.loadUser();
,并手动调用它:
{{1}}
答案 1 :(得分:0)
当然,它会是null
,当您尝试从中获取信息时,您的loginController
课程已经关闭。
我错过了扩展 JavaFX Application
类并实现launch
方法的类......
您应该在测试完成后loginController
类中设置 userName / password 变量并成功登录 - 这样,如果窗口(阶段)失败,您将保持窗口(阶段)打开你确定用户名/密码是正确的。