单击按钮后JFrame冻结,必须强行终止

时间:2013-10-05 16:29:05

标签: java sql swing button event-dispatch-thread

美好的一天

我还在学校学习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的样子会很有用。你会更好地理解为什么我的代码是这样的,希望如此。

http://tinypic.com/r/ao9udg/5

我希望有人可以帮助我!不顾一切地解决这个恼人的问题。

1 个答案:

答案 0 :(得分:0)

尝试纠正我没有真正理解的事情失败,或者首先想到的是错误,我终于发现了我的问题。所有发生的事情都是在我的JFrame属性中,我将此窗口设置为始终位于顶部。当我单击“应用”按钮时,框架似乎只是冻结,因为显示成功JOptionPane,只有落后于 GUI,所以我无法响应它。禁用“Always On Top”选项后,它现在可以正常运行。

感谢所有的建议! :)