我还在学校学习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(Event Dispatch Thread) - 当发生这种情况时GUI将“冻结”。而不是调用'Thread.sleep(n)'实现一个Swing'Timer'来重复执行任务,或者一个'SwingWorker'执行长时间运行的任务。有关更多详细信息,请参见[Swing中的并发](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 2)*“亲切的问候,布兰登”*噪音,离开它。 –
[聊天程序冻结JFrame]的可能重复(http://stackoverflow.com/questions/16718198/chat-program-freezes-jframe)或[this one](http://stackoverflow.com/q/17627104/418556 )或[this one](http://stackoverflow.com/q/14305747/418556)(本身是[this one]的副本(http://stackoverflow.com/q/14271902/418556)).. –
* “......有用的知道这个JFrame是什么样子的,你会更好地理解为什么我的代码是这样的,希望是这样。”*其实我之前提到的所有内容都是标题的前两个单词(JFrame冻结..)和SQL标记。这足以确定这里可能的罪魁祸首。 –