java我无法找到程序发送异常的原因
我试图在从文本字段登录后获取用户名,并通过实例化“logincontroller”类的新对象传递到另一个场景,但它显示了“NullPointerException”错误。在第一个类“Logincontroller”中,我通过调用方法“CurrentUsername()”来打印用户名,在另一个类“AddDocument”中调用了相同的方法,但不起作用。首先,从用户名文本字段中存储用户名并在另一个字段中访问它是否正确?有没有更好的方法在登录后在另一个场景中访问用户名?我想知道,如果有人能帮助我,我将不胜感激
public class LoginController implements Initializable {
@FXML
private TextField txtUsername;
@FXML
private TextField txtPassword;
@FXML
.
.
.
@FXML
public void loginaction (ActionEvent event){
try {
if (this.loginmodel.isLogin(this.txtUsername.getText(),this.txtPassword.getText(),((Option)this.RoleSelection.getValue()).toString())){
Stage stage = (Stage)this.btnLogin.getScene().getWindow();
stage.close();
switch (((Option)this.RoleSelection.getValue()).toString()){
case "Employee" :
EmployeeLogin ();
break;
case "Student":
StudentLogin();
break;
case "Admin":
AdminLogin();
System.out.println(CurrentUsername()); // Here it has value and shows the username
break;
}
}
else {this.loginStatus.setText("Der Benutzername oder das Kenntwort ist nicht Korrekt");}
}
catch (Exception localException){
// System.out.print("test failed");
}
}
public String CurrentUsername() {
String username = txtUsername.getText();
return username;
}
}
public Class AddDocument {
@FXML
private TextField DocumentId;
@FXML
private TextField DocumentName;
@FXML
private TextField Date;
.
.
.
// for the username I created a new object from the class where there is the text field "txtUsername.getText()"
public static void main(String[] args) {
LoginController loginController = new LoginController ();
String User = loginController.CurrentUsername();
System.out.println(User); // here it it doesn't show the value, but an exception Caused by: java.lang.NullPointerException
}
}
# 1 楼答案
您没有实例化任何一个TextField对象,因此当您从CurrentUsername方法中调用对象“txtUsername”上的方法时,会抛出一个
NullPointerException
解决问题的一个方法是在LoginController类的构造函数中实例化声明的对象,例如:
# 2 楼答案
您正在调用控制器,然后中间调用用户,该用户为空
编辑:
我只需要创建一个带有属性、getter和setter的用户类,并从主类实例化它
然后,在你的主要课堂上,使用它:
在登录控制器中,您需要有对mainApp的引用,比如:
加载控制器和FXML时,设置mainApp参考:
最后,当您登录应用程序时,如果可以,只需将用户存储在mainApp用户:
就这样,现在可以使用主类中的getCurrentUser()从任何地方调用用户数据
我希望这能帮助你
# 3 楼答案
我觉得
txtUsername
是空的,因为你正面临NPE设置
txtUsername
的方式和位置尝试将你的方法
CurrentUsername()
更改为这样至少你不会有NPE。然后看看在哪里以及如何设置
txtUsername