我添加以下内容将我的程序的注册页面连接到我的数据库,但每当我按下注册按钮来测试帐户时,都会收到错误java.lang.nullPointerException。我认为问题是getText必须是getPassword,但是当我这样做时我会收到一个方法。有人有什么想法吗?
register = new JButton("Register");
register.setBackground(Color.black);
register.setForeground(Color.white);
register.setBounds(250, 12, 120, 30);
register.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent reg) {
if (firstName.getText().equals("") || lastName.getText().equals("") || age.getText().equals("") || user.getText().equals("") || pass.getText().equals("")) {
JOptionPane.showMessageDialog(null, "Invalid Input Data.\nPlease Try Agian.", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
try{
String sql = "INSERT INTO Users (ID, First Name, Last Name, Age, Username, Password) VALUES (?, ?, ?, ?, ?, ?)";
ps = conn.prepareStatement(sql);
ps.setInt(1, 0);
ps.setString(2, firstname.getText());
ps.setString(3, lastname.getText());
ps.setString(4, age.getText());
ps.setString(5, user.getText());
ps.setString(6, pass.getText());
ps.execute();
JOptionPane.showMessageDialog(null, "Registration Successful!/nYou can now log into the database.");
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
finally {
try{
rs.close();
ps.close();
}catch(Exception e) {
}
}
}
});
答案 0 :(得分:0)
从Javadoc for JTextField的默认构造函数:
public JTextField()
构造一个新的TextField。创建默认模型,初始字符串为空,列数设置为0.
因此,如果用户未填写firstName
,firstName.getText() == null
,则会抛出NPE。
你可以通过做一些事情来改进这门课程:
AbstractAction
并将其与按钮一起使用; AbstractAction
也可以在菜单中使用。 DocumentListener
以启用或禁用抽象操作,该操作还会启用和禁用按钮。PreparedStatement
使用Java 7 try-with-resources。小心;如果finally块中的第一个close
语句抛出,则第二个从不执行;你需要将rs.close()
包装在try-catch块中。但尝试资源使得这无关紧要。顺便说一句,从Javadoc为close方法,当Statement对象关闭时,它的当前ResultSet对象(如果存在)也将关闭。