Избегайте заморозки после действия на JButton - PullRequest
3 голосов
/ 12 декабря 2011

Я новичок в Java, поэтому прошу прощения за этот вопрос новичка.

У меня есть JButton, когда я нажимаю на него, запускаются несколько запросов MySQL и некоторые обновления на дисплее, которые занимают 2 или 3 секунды.За это время мой пользовательский интерфейс полностью зависает.Есть ли способ избежать этого?Может быть, я должен использовать что-то вроде синхронизированного, потокового или запускаемого, но я не очень хорошо понимаю.Может ли кто-нибудь объяснить мне, пожалуйста?

Большое спасибо.

С уважением.

Винсент

1 Ответ

3 голосов
/ 12 декабря 2011

Поскольку вы выполняете запросы в том же потоке, что и пользовательский интерфейс, этот поток не может в то же время получать какие-либо пользовательские команды, поэтому он "зависает".

Решение состоит в том, чтобы запустить новыйпоток и выполнять запросы параллельно, а затем использовать что-то вроде SwingUtilities.invokeLater для обновления пользовательского интерфейса.Что-то вроде:

 // button action listener code

 Thread t = new Thread(new Runnable() {
    public void run() {

       // execute query here

       SwingUtilities.invokeLater(new Runnable() {
           public void run() {

               // update the ui here

           }
       });
    }
 });
 t.start();

SwingUtilities.invokeLater эффективно ставит в очередь действие обновления, пока все ожидающие события в потоке пользовательского интерфейса не будут обработаны.Прочитайте Javadoc здесь .

...