Java - SwingWorker和SwingUtilities.invokeLater()之间的区别

Yat*_*oel 9 java swingworker swingutilities

SwingWorker 用于以下目的:

  • 用于在不同的线程中运行长时间运行的任务,以防止GUI无响应
  • 用于通过done()方法在任务结束时使用长时间运行的任务生成的结果更新GUI .
  • 用于通过任务publish()process()方法生成和发布的中间结果不时更新GUI .

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

Kat*_*one 6

SwingWorker是一个帮助类 - 它不是你需要使用它,但使用它比手工完成相同的工作更简单和清晰.(它还使检查进度更容易.)请注意,它已添加版本6 - 之前有些人使用了Swing Tutorial中定义的更简单的类,或者执行了类似于您注意到的步骤.