2013-10-05 2 views
0

Добрый деньJFrame замораживает После кнопки Click, должен быть насильственная Отменено

Я еще в школе изучения программирования на Java, и есть проект, я работаю. Все работает нормально, однако одна функция моей программы, которая позволяет пользователю изменять свои учетные данные, больше не функционирует должным образом. Я ничего не помню, чтобы что-то менять, и все было хорошо.

Проблема возникает, когда я нажимаю кнопку «Применить» у меня есть, которая выполняет SQL-запрос, чтобы изменить значения поля имени пользователя и пароля в базе данных. JFrame замерзает, и я вынужден принудительно завершить его с помощью WTM. Также следует отметить, что в консоли, я получаю сообщение в красном поговорке:

Java Результат: -805306369

Он имеет то же самое значение каждый раз. Я сделал несколько Googling, и все, что я нашел, это то, что проблемы, подобные замораживанию, вызваны ошибками цикла, но, насколько мне известно, у меня нет этой части кода.

Если бы кто-нибудь мог мне помочь, я был бы так благодарен! Вытащить мои волосы.

Ниже приведен мой код для кнопки «Применить», а также 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

Я надеюсь, что кто-то может мне помочь! Отчаянно пытаюсь исправить эту неприятную проблему.

+3

1) Не блокируйте EDT (Thread Dispatch Thread) - графический интерфейс «замораживается», когда это произойдет. Вместо вызова 'Thread.sleep (n)' реализовать Swing 'Timer' для повторения задач или' SwingWorker' для длительных задач. Подробнее см. [Параллелизм в Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/). 2) * «С уважением, Брэндон» * Шум, оставьте это. –

+1

Возможный дубликат [Программа чата зависает JFrame] (http://stackoverflow.com/questions/16718198/chat-program-freezes-jframe) или [этот] (http://stackoverflow.com/q/17627104/418556) или [этот] (http://stackoverflow.com/q/14305747/418556) (сам дубликат [этого] (http://stackoverflow.com/q/14271902/418556)) .. –

+1

* «... полезно знать, как выглядел этот JFrame. Вы лучше поймете, почему мой код такой, какой он есть, надеюсь». * На самом деле все, что я заметил до того, как я прокомментировал, было первым двумя словами названия (JFrame зависает ..) и тег SQL. Этого достаточно, чтобы определить вероятного виновника здесь. –

ответ

0

После неудачных попыток исправить ситуацию я не сделал действительно понял, или мысль была неправильной, в первую очередь, я, наконец, обнаружил свою проблему. Все, что происходило, было то, что в моих свойствах JFrame я установил это окно всегда на первое место. Когда я нажал кнопку Apply, рамка только замерзла, потому что показывался успех JOptionPane, только за GUI, поэтому я не мог ответить на него. После отключения опции «Always On Top» теперь она работает отлично.

Спасибо за все предложения! :)