Разница между SwingWorker и SwingUtilities.invokeLater
Мне нужно запустить некоторый метод в приложении Swing в отдельном потоке. В чем разница между использованием SwingWorker и SwingUtilities.invokeLater. Какой из них следует использовать для запуска потока в приложении Swing? Я не смог найти точную информацию в учебнике по
http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html
Ответы
Ответ 1
SwingUtilities.invokeLater
используется, если у вас есть что-то, что должно выполняться в EDT.
Если у вас многолетняя задача, вам нужно использовать SwingWorker
, поскольку она не запускается на EDT и, следовательно, не вызывает зависание графического интерфейса во время его запуска.
Ответ 2
Похоже, вы захотите:
-
используйте SwingWorker
, когда вам нужно отслеживать состояние долговременного фонового процесса.
-
используйте SwingUtilities.invokeLater
, если вы просто хотите выполнить короткую задачу, но не нуждаетесь в обратной связи. Похоже на огонь и забыть. Просто имейте в виду, что он будет запускаться в потоке диспетчеризации событий AWT, поэтому ваше приложение не будет обрабатывать какие-либо события во время выполнения задачи.