在Swing的计时器中,“快速”的含义是什么?

2022-09-04 00:47:18

Java 教程中

请注意,计时器的任务在事件调度线程中执行。这意味着任务可以安全地操作组件,但这也意味着任务应该快速执行。如果任务可能需要一段时间才能执行,请考虑使用 计时器代替 或 作为附加时间。SwingSwingWorker

“快速”是什么意思?我的意思是,这并不精确,不到一分钟就很快还是什么?

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


答案 1

这意味着 - 它应该很快,就像在 - 很少甚至没有可见的延迟

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

问题不一定是一切运行的速度有多快,而是它的顺序是否正确。

在 SwingWorker 中,你将了解到多线程 Swing 应用中有两个主要关注点:

  • 不应在事件调度线程上运行耗时的任务。否则,应用程序将无响应。

    只能在事件调度线程上访问 Swing 组件。


答案 2

回答您的具体问题。

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

是的,平滑动画需要计时器。

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

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

因此,对于一分钟的动画,您需要2,400个面板。预先计算这些面板,并仅渲染它们,将带来更流畅的动画。