环境:SQLServer 2008 R2 + MyEclipse 6.5 + JDK 1.6.24
问题:当使用JPasswordField类接收用户的密码,单击注册按钮无反应,向数据库插入数据时出现不可预期的结果。
如下图红色标识处(数据库数据):
分析一下可知,这是表示一个类的HashCode,很显然插入的数据中有一个类的HashCode表示。
代码如下(截取):
private JPasswordField tf_upwd, tf_ok;// tf_upwd为输入密码框 tf_ok为确认密码的输入框
String userPwd;//接收输入密码
String userPwdOk;//接收输入的确认密码
//userPwd = tf_upwd.getText();
userPwd = tf_upwd.getPassword().toString();
System.out.println(userPwd);
//userPwdOk = tf_ok.getText();
userPwdOk = tf_ok.getPassword().toString();
System.out.println(userPwdOk);
//看下打印的结果:
//[C@601bb1
//[C@1ba34f2
if (jb_ok == e.getSource()){
System.out.println("hh");
//if(userPwdOk.equals(userPwd)){
// userPwdOk.equals(userPwd)判断前后输入的密码是否一致,因为toString是表示一个类的文本显示,如果没重写,则返回该类的HashCode,如果对象不同,很显然HashCode不一致,对比是否相等很显然返回false
boolean isRegistSuc = false;
isRegistSuc = uDeal.registUser(deptId, userAccount, userPwd, userName, userGender, userPhone, userEmail);//注册用户方法
if (isRegistSuc) {
JOptionPane.showMessageDialog(this, "注册成功");
}else {
JOptionPane.showMessageDialog(this, "注册失败");
}
//}
}
看下Object类的toString方法源码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
总结:JPasswordField 的getPassword()方法返回char数组,调用toString方法返回其HashCode。如果需要显示文本内容,可以重写toString方法。如果要得到输入的密码,可以使用JPasswordField的getText方法。