我想使用此动作侦听器方法检查用户名和密码 但我总是收到错误的密码!
public void actionPerformed(ActionEvent arg0) {
String uN = usernameFiled.getText();
String pass = passwordField.getPassword().toString();
//
if (uN.isEmpty() || pass.isEmpty()){
JOptionPane.showMessageDialog(LoginPage.this, "Fields should not be empty!", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
HashMap<String, User> users = UserDAO.getInstance().getUsers();
User temp = users.get(uN);
if (temp.getPassword().equals(pass)){
JOptionPane.showMessageDialog(LoginPage.this, "Login successfull", "Success", JOptionPane.INFORMATION_MESSAGE);
}
else {
JOptionPane.showMessageDialog(LoginPage.this, "Wrong username or password", "Error ", JOptionPane.ERROR_MESSAGE);
}
}
});
代码有什么问题?
答案 0 :(得分:0)
passwordField.getPassword()
返回char[]
。因此,通过调用toString(),您可以获得char[]
的对象字符串。所以,您使用的语句不会给您密码。
String pass = passwordField.getPassword().toString();
以下列方式使用它。
String pass = new String(passwordField.getPassword());
答案 1 :(得分:0)
JPasswordField#getPassword
返回char[]
中此TextComponent中包含的文本。 char[].toString()
不返回字符串值,array.toString
实际上返回变量的名称并具有代码。
您应该致电new String(passwordField.getPassword())
或String.valueOf(passwordField.getPassword())
尝试 -
String pass = new String(passwordField.getPassword());
或
String pass = String.valueOf(passwordField.getPassword());