首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExecutorService vs Swing计时器

ExecutorService vs Swing计时器
EN

Stack Overflow用户
提问于 2009-01-06 15:09:21
回答 3查看 2K关注 0票数 4

我最近一直在阅读Filthy Rich Clients,并注意到,尽管Java6版本,但没有提到并发框架。所以,他们谈论的是java.util.Timer和javax.swing.Timer,而不是ExecutorService。

我在问题"Java Timer vs ExecutorService“中读到了ExecutorService的优点,并决定使用后者而不是前者。但这本书谈到了javax.swing.Timer及其特定于Swing开发的优势。

那么,这是否意味着,对于Swing开发(动画按钮等),javax.swing.Timer仍然是更好的选择,或者在新的并发框架中是否有相关的类来取代它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-06 15:42:52

那么,Swing计时器至少可以在EDT上运行,所以您不必将所有内容都包装在对invokeLater的调用中。它还很好地绑定了Swing,因为它使用了Actions、ActionListeners和其他与Swing相关的类。

对于与Swing相关的任务,我会坚持使用Swing Timer,而对于不涉及更新GUI的任务,我会使用新的并发包。

看看Using Timers in Swing Applications,因为它可能包含更多信息来摆动(抱歉)决策。

票数 6
EN

Stack Overflow用户

发布于 2009-01-06 15:43:20

我会说,对于简单的swing相关的东西,更好的选择是javax.swing.Timer,因为上面提到了here的优点。

注意,Swing计时器的任务是在事件分派线程中执行的。这意味着该任务可以安全地操作组件,但这也意味着该任务应该快速执行。

另一方面,如果您需要执行与swing无关的或更复杂/冗长的处理操作,ExecutorService是非常健壮的,绝对是可行的。

票数 5
EN

Stack Overflow用户

发布于 2009-01-06 16:05:16

这只是一个建议,详细阐述布鲁诺的建议,在不破坏Swing的情况下利用优秀的Java 1.5+并发实用程序的一种模式是让您的ExecutorService完成所有繁重的工作(正如bruno所说的),但一旦完成,ExecutorService线程应该使用以下方法之一将与实际UI组件的交互传递给可运行的AWT线程:

  • javax.swing.SwingUtilities.invokeAndWait(Runnable doRun)
  • javax.swing.SwingUtilities.invokeLater(Runnable doRun)

这些方法传递要由AWT线程执行的runnable。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/416893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档