Разница между SwingWorker и SwingUtilities.invokeLater - PullRequest
11 голосов
/ 18 марта 2010

Мне нужно запустить какой-то метод в приложении Swing в отдельном потоке. В чем разница между использованием SwingWorker и SwingUtilities.invokeLater. Какой из них я должен использовать для запуска потока в приложении Swing? Я не смог найти точную информацию в руководстве на

http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html

Ответы [ 2 ]

8 голосов
/ 18 марта 2010

SwingUtilities.invokeLater используется, если у вас есть что-то, что должно работать в EDT.

Если у вас есть длительное задание, вам вместо этого нужно использовать SwingWorker, так как он не запускается в EDT и, следовательно, не вызывает зависание графического интерфейса во время выполнения.

7 голосов
/ 18 марта 2010

Похоже, вы бы хотели:

  • используйте SwingWorker, когда вам нужно отслеживать состояние длительного фонового процесса

  • используйте SwingUtilities.invokeLater, если вы просто хотите выполнить короткое задание, но не нуждаетесь в обратной связи. Вроде как огонь и забыть. Просто имейте в виду, что он будет выполняться в потоке диспетчеризации событий AWT, поэтому ваше приложение не будет обрабатывать события во время выполнения задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...