gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:05 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com