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

标签 java swingworker swingutilities

SwingWorker 用于以下目的:

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

SwingUtilities.invokeLater() 可以按如下方式执行上述任务:

  • 我们可以执行 ExecutorService.submit(new MyRunnable()) 而不是从 EDT 执行 SwingWorker.execute() 方法,因为它还会创建另一个线程可以执行长时间运行的任务。
  • 为了在任务结束时更新 GUI,我们可以将代码(写在案例 1 的 done() 方法中)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())在任务结束时。
  • 为了在任务中间更新 GUI,我们可以放置代码(写在案例 1 的 process() 方法中)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())在案例 1 中我们调用 publish() 方法的地方。

我问这个问题是因为问题 Java - SwingWorker - Can we call one SwingWorker from other SwingWorker instead of EDT 中指定的问题可以用SwingUtilities.invokeLater()解决,不能用SwingWorker

解决

最佳答案

SwingWorker 是一个辅助类 -- 并不是说​​您需要使用它,而是使用它比手动完成相同的工作要简单明了得多。 (它还使检查进度更容易。)请注意,它是在版本 6 中添加的——在此之前,有些人使用了 Swing 教程中定义的更简单的类,或者执行了与您提到的类似的步骤。

关于Java - SwingWorker 和 SwingUtilities.invokeLater() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2829364/

相关文章:

java - setAdapter() 使应用程序崩溃

java - Controller spring bean 共享属性和引用 bean 导致 javax.servlet.UnavailableException

Java比较一天中自定义开始结束时间的两次

带有 jvmti 的 java 代理在运行时加载,从内部卸载

java - 为什么客户端B没有得到完整的文件

java - 如何从 JButton ActionListener 调用重型算法

java - 对执行 Swing 应用程序的主类中的 SwingUtilities.invokeLater() 方法的调用到底是什么?

java - 将数据从 SwingWorker 线程返回或获取/分配给变量。初学者

java - javax.swing.SwingUtilities.invokeLater 是必要的吗?

Java 小程序 : JProgressBar updating/refreshing only at completion