Java - различие между SwingWorker и SwingUtilities.invokeLater ()

SwingWorker используется в следующих целях:

  • Для выполнения продолжительных задач в другом потоке, чтобы препятствовать тому, чтобы GUI был безразличен
  • Для обновления 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() метод в case1.

Я задаю этот вопрос, потому что проблема указала рассматриваемый Java - SwingWorker - Может мы звонить, один SwingWorker от другого SwingWorker вместо EDT может быть решен SwingUtilities.invokeLater() но не может быть решен с SwingWorker

9
задан Community 23 May 2017 в 00:32
поделиться

1 ответ

SwingWorker является вспомогательным классом - не то, чтобы его нужно использовать, но его использование намного проще и понятнее, чем выполнение той же работы вручную. (Это также облегчает проверку прогресса.) Обратите внимание, что он был добавлен в версии 6 -- до этого некоторые люди использовали более простой класс, определенный в Swing Tutorial, или делали шаги, похожие на те, которые вы отметили.

6
ответ дан 3 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: