Swing的计时器中"quick"的含义是什么?

Soh*_*eil 14 java swing timer timertask

Java教程:

请注意,Swing计时器的任务是在事件派发线程中执行的.这意味着任务可以安全地操作组件,但这也意味着任务应该快速执行.如果任务可能需要一段时间才能执行,那么请考虑使用SwingWorker替代或替代计时器.

"快速"是什么意思?我的意思是不准确,不到一分钟很快或者什么?

例如,如果我想用一些面板制作动画(1分钟),通过移动它们,改变它们的透明度......并且用户只是看到面板而不能使用它们(没有我/ O),现在Timer是这种情况的好主意吗?

Cof*_*fee 12

这意味着 - 它应该是快速的,因为 - 几乎没有可见的延迟.

但是,稍后在页面中他们会说如果你有一个复杂的并发应用程序,请查看SwingWorker 类并了解有关swing的并发性.

关注的不一定是一切运行的速度有多快,而是它的顺序正确.

在SwingWorker中,您将了解到多线程Swing应用程序存在两个主要问题:

  • 不应在Event Dispatch Thread上运行耗时的任务.否则应用程序将无响应.

    应仅在Event Dispatch Thread上访问Swing组件.

  • 我上面解释的情况怎么样? (2认同)

Gil*_*anc 8

回答你的具体问题.

如果我想用一些面板制作动画(1分钟),通过移动它们,改变它们的透明度......用户只是看看面板而不能使用它们(没有I/O) ,现在Timer是这种情况的好主意吗?

是的,平滑动画需要一个Timer.

假设您希望每秒显示40帧.这意味着您有25毫秒准备和显示每个面板.

显然,你可以在动画循环之外移动的计算越多越好.现代个人计算机上只需几毫秒即可渲染面板.计算面板,可以轻松占用超过25毫秒.

因此,对于一分钟的动画,您需要2,400个面板.预先计算这些面板,然后只渲染它们,将导致更平滑的动画.


Laf*_*ica 6

在这种情况下,快速没有固定的时间限制.但是,您应该假设任何花费超过几十毫秒的任务通常不会被视为快速.请注意,在EDT上运行的任何代码都可能会在应用程序的GUI中产生各种问题.这就是文档建议您使用的原因SwingWorker.

这还取决于你的延迟Timer.如果它每50ms运行一次,那么运行30ms的任务就会变慢.但是,如果您的任务每5-10分钟运行一次仅30分钟,则可以接受.您必须运行一些测试,以确定您Timer的应用程序是否有任何明显的影响.

有关EDT的更多信息,请查看此文章.此外,这个答案提供了很多关于如何使用SwingWorker对象的信息.