SwingWorker
используется для следующих целей:Java - Разница между SwingWorker и SwingUtilities.invokeLater()
- Для запуска долго выполняющиеся задачи в другом потоке таким образом, чтобы предотвратить GUI от того, отвечать на запросы
- Для обновления графического интерфейса с результатами, полученными в ходе выполнения задачи в конце задачи, с помощью метода
done()
. - Временное обновление GUI с промежуточными результатами, полученными и опубликованными заданием с помощью методов
publish()
иprocess()
.
SwingUtilities.invokeLater()
может выполнять вышеуказанные задачи следующим образом:
- Вместо выполнения
SwingWorker.execute()
метод из EDT, мы можем выполнитьExecutorService.submit(new MyRunnable())
как это будет также создать еще один поток, который может выполнить затянувшуюся задачу. - Для обновления GUI в конце задачи мы можем поместить код (записанный в
done()
метод case1)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())
в конце задачи. - Для обновления GUI в середине задачи мы можем поместить код (написанный в
process()
методом case1)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())
в том месте, где мы вызвали методpublish()
в случае1.
Я задаю этот вопрос, потому что проблема, указанная в вопросе Java - SwingWorker - Can we call one SwingWorker from other SwingWorker instead of EDT может быть решена с помощью SwingUtilities.invokeLater()
, но не может быть решена с SwingWorker
Я не совсем уверен, что 'вопрос' есть. – akf
@akf, если вы не уверены, а затем оставьте его. Simple :) –
Проблема, о которой вы говорите, разрешима с помощью SwingWorker. Смотрите мой ответ. –