【发布时间】:2013-10-05 16:29:05
【问题描述】:
美好的一天
我还在学校学习 Java 编程,并且我一直在做一个项目。一切正常,但是我的程序中允许用户更改其登录凭据的一项功能不再正常运行。我不记得改变任何东西,它以前工作得很好。
当我单击执行 SQL 查询以更改数据库中的用户名和密码字段值的“应用”按钮时,就会出现问题。 JFrame 冻结,我必须通过 WTM 强行终止它。另外需要注意的是,在控制台中,我收到一条红色消息:
Java 结果:-805306369
它每次都具有相同的值。我做了一些谷歌搜索,我发现像冻结这样的问题是由循环错误引起的,但据我所知,我没有任何代码的这个特定部分。
如果有人能帮助我,我将不胜感激!把我的头发拉出来。
下面是我的“应用”按钮代码,以及 SQL 查询。
private void btnApplyActionPerformed(java.awt.event.ActionEvent evt) {
try {
if (txtNewUsername.equals("")) {
labelFlagUsername.setVisible(false);
JOptionPane.showMessageDialog(this, "You Need To Fill In The New Username Field", null, JOptionPane.ERROR_MESSAGE);
System.out.println("You Need To Fill In The New Username Field");
} else if (txtNewPassword.equals("")) {
labelFlagPassword.setVisible(false);
JOptionPane.showMessageDialog(this, "You Need To Fill In The New Password Field", null, JOptionPane.ERROR_MESSAGE);
System.out.println("You Need To Fill In The New Password Field");
} else {
UN = txtNewUsername.getText();//Gets value that user entered into field
PW = txtNewPassword.getText();//Gets value that user entered into field
DM.editLoginDetails(UN, PW);//Executes SQL query editLoginDetails
}
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, e.getMessage(), null, JOptionPane.ERROR_MESSAGE);
System.out.println(e.getMessage());
}
txtCurrentUsername.setText(" " + DM.getUsername(UN));
txtCurrentPassword.setText(" " + DM.getPassword(PW));
String temp = "";
txtNewPassword.setText(temp);
txtNewUsername.setText(temp);
}
SQL 查询:
public String editLoginDetails(String UN, String PW)
{
try {
Statement st = con.createStatement();
String query = "UPDATE Users SET Username = '" + UN + "',Password = '" + PW + "';";
st.execute(query);
ResultSet rs = st.getResultSet();
JOptionPane.showMessageDialog(null, "Your login details were changed successfully!");
System.out.println("Your login details were changed successfully!");
catch (Exception e)
{
JOptionPane.showMessageDialog(null, e.getMessage());
System.out.println(e.getMessage());
}
return "Your login details were changed successfully!";
}
最后,我认为知道这个 JFrame 长什么样会很有用。希望您能更好地理解为什么我的代码是这样的。
我希望有人可以帮助我!急于解决这个烦人的问题。
【问题讨论】:
-
1) 不要阻塞 EDT(事件调度线程)——当这种情况发生时,GUI 会“冻结”。而不是调用
Thread.sleep(n)实现一个摆动Timer用于重复任务或一个SwingWorker用于长时间运行的任务。有关详细信息,请参阅Concurrency in Swing。 2) “亲切的问候,布兰登” 噪音,别说了。 -
Chat program freezes JFrame 或 this one 或 this one 的可能重复项(本身是 this one 的重复项)..
-
"..有助于了解这个 JFrame 的样子。希望您能更好地理解为什么我的代码是这样的。"在我评论之前注意到的是标题的前两个单词(JFrame freezes..)和 SQL 标记。这足以确定这里可能的罪魁祸首。
-
不一定相关,但您应该真正学习准备好的语句(因为如果密码包含引号,您的查询将失败),并且您的查询会更新所有用户的名称和密码!此外,查询末尾不应有分号。
-
@JB Nizet:只有一个用户,所以不用担心:)
标签: java sql swing button event-dispatch-thread