Разница между 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, поэтому ваше приложение не будет обрабатывать какие-либо события во время выполнения задачи.