Обновление Swing GUI в ожидании завершения потока - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть приложение Swing с классом Thread, выполняющим определенную работу.Мне нужно в определенный момент остановить запущенную нить.поэтому я поместил логическое значение в поток, и когда я установлю его в значение true, поток будет остановлен.

Проблема в том, что потоку требуется некоторое время, чтобы завершить внутреннюю работу, которую он выполняет.

Мне нужно запретить пользователю выполнять какие-либо действия с графическим интерфейсом, пока поток не закончится.Я пробовал что-то вроде setEnabled (false), но приложение зависает и графический интерфейс не изменяется до тех пор, пока поток не будет остановлен.Я также пытался обновить GUI в другом потоке, но это также не работает.

Есть ли способ обновить GUI или сделать приложение как отключенное, пока задержка остановленного потока закончена.

Спасибо

Ответы [ 2 ]

5 голосов
/ 14 декабря 2011

Лучше использовать SwingWorker :

button.setEnabled(false);
...    
@Override
protected String doInBackground() throws Exception {
    // process related code
    return "";
}

@Override
protected void done() {
    button.setEnabled(true);
}

Метод done() будет вызван после завершения процесса doInBackground ().

0 голосов
/ 14 декабря 2011

Если вы знаете, когда ваш поток останавливается, установите другое логическое значение, например, thread_stopped = true;И перед любым событием действия проверьте, является ли thread_stopped истиной, тогда продолжайте.

...