我的程序在初始化程序之前从用户获取用户名和密码验证, 所以我创建了一个按钮登录,我将ActionListener关联到下面显示
login.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
if(txtUserName.getText().equals("Suraj") && (txtPwd.getPassword().toString()).equals("s123")){
dispose();
TimeFrame tFrame = new TimeFrame(userName);
tFrame.setVisible(true);
tFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
tFrame.setLayout(new GridLayout());
} else {
JOptionPane.showMessageDialog(null,"User name or password don't match","Acces Denied", JOptionPane.ERROR_MESSAGE);
}
现在出现的问题是即使输入正确的密码,程序也会显示错误消息 sage
答案 0 :(得分:5)
getPassword()
返回char[]
。它上面的toString()
不会像你想象的那样将内容作为字符串返回。
尝试new String(txtPwd.getPassword()).equals("s123")
。
但是,有一个原因是char[]
而不是字符串。尝试在the javadoc.
答案 1 :(得分:3)
注意:这应该是一个评论,但对此来说太长了。考虑给链接线程
中的答案提供upvotes正如mKorbel已经指出的那样,在getText() vs getPassword()中有一个相当完整的讨论。
此外,阅读Swing tutorial关于JPasswordField
,其中包含一个关于如何比较密码的好例子(通过比较char数组,而不是通过将char数组转换为String
) - 教程中的小复制粘贴:
private static boolean isPasswordCorrect(char[] input) {
boolean isCorrect = true;
char[] correctPassword = { 'b', 'u', 'g', 'a', 'b', 'o', 'o' };
if (input.length != correctPassword.length) {
isCorrect = false;
} else {
isCorrect = Arrays.equals (input, correctPassword);
}
//Zero out the password.
Arrays.fill(correctPassword,'0');
return isCorrect;
}
本答案开头的链接SO问题Hovercraft Full Of Eels中的his answer很好地解释了你应该比较字符数组的原因。
答案 2 :(得分:0)
我遇到了同样的问题:
private void loginActionPerformed(java.awt.event.ActionEvent evt) {
char[] pass = passwordField.getPassword();
String mypass = pass.toString();
String user = (String) combo.getSelectedItem();
try {
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
String db = "jdbc:odbc:LoginDB";
con = DriverManager.getConnection(db);
st = con.createStatement();
String sql = "select * from Table2";
rs = st.executeQuery(sql);
while (rs.next()) {
String AdminNewID = rs.getString("AdminID");
String AdminNewPass = rs.getString("AdminPassword");
if ((user.equals(AdminNewID)) && pass.equals(AdminNewPass)) {
MyApp form = new MyApp();
form.setVisible(true);
} else {
this.res.setText(" Incorrect User Name or Password");
}
}
} catch (Exception ex) {
}
}