public void actionPerformed(ActionEvent e) {
// 单击取消按钮的事件处理程序
if (e.getSource() == b_cancel) {//b_cancel是个按钮
dispose();
}
// 单击添加按钮的事件处理程序
else if (e.getSource() == b_addname) {//b_addname是个按钮
String s = t_aenter.getText();//t_aenter是个JPasswordField
// 判断两次输入的密码是否一致
if (t_apass.getText().equals(s)) {//t_apass是JPasswordField
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;

try {
// 建立数据库连接
con = JdbcUtils.getConnection();
String sql = "select * from users where username=?";
ps = con.prepareStatement(sql);
ps.setString(1, t_aname.getText().trim());

// 根据用户添加的用户名进行选择
rs = ps.executeQuery();

// 如果已经存在同名的用户,则显示错误提示
if (rs.next()) { l_addname.setText("用户已经存在,添加失败!"); }
// 如果不存在用户名,则将用户新添加信息添加到数据库中
//javax.swing.text.JTextComponent.getText()
else {
sql = "insert into users (username, password, permission) values(?, ?, ?)";
ps = con.prepareStatement(sql);
ps.setString(1, t_aname.getText().trim());
ps.setString(2, (t_apass.getText()).toString());
ps.setString(3, c_permission.getSelectedItem().trim());
ps.executeUpdate();
l_addname.setText("用户添加成功");
}
} catch (SQLException e1) {

System.out.println("很抱歉,系统连接数据库时出错,以下是出错信息描述:");
e1.printStackTrace();
}
finally{
JdbcUtils.free(rs, ps, con);
} } else {
l_addname.setText("两次输入的密码不一致!");
t_apass.setText("");
t_aenter.setText("");
}
}
}
问题是用getText()来从一个JPasswordField框中获取密码不好,可以改用getPassword()来获取,但是是用getPassword()取得的是个char[]类型,不能与String类型的密码串进行匹配.我也试过getPassword()后把它toString().但是这样得到的串却无法与正确的密码串进行比较.怎么办啊???
密码String

解决方案 »

  1.   

    不要用toString(), 一个类没有重写toString()的话,返回其创建对想的地址。
    用字符串构造函数。
    未验证,楼主试试。    // 单击添加按钮的事件处理程序
        else if (e.getSource() == b_addname) {//b_addname是个按钮
            //String s = t_aenter.getText();//t_aenter是个JPasswordField
            String s = new String(t_aenter.getPassword());
            // 判断两次输入的密码是否一致
            //if (t_apass.getText().equals(s)) {//t_apass是JPasswordField
            if ((new String(t_apass.getPassword())).equals(s)) {