请注意,
Swing
计时器的任务是在事件派发线程中执行的。这意味着任务可以安全地操作组件,但这也意味着任务应该快速执行。如果任务可能需要一段时间才能执行,那么请考虑使用SwingWorker
代替计时器或使用{{1}}。
“快速”是什么意思?我的意思是不准确,不到一分钟很快或者是什么?
例如,如果我想用一些面板制作动画(1分钟),通过移动它们,改变它们的透明度......用户只是要看面板而不能使用它们(没有I / O),现在Timer对于这种情况是个好主意吗?
答案 0 :(得分:12)
这意味着 - 它应该是快速的,因为 - 几乎没有可见的延迟。
但是,稍后在页面中他们会说如果您有一个复杂且并发的应用程序,请查看SwingWorker类并了解concurrency in regards to swing。
关注的不一定是一切运行得多快,而是它的顺序正确。
在SwingWorker中,您会发现多线程Swing应用程序存在两个主要问题:
不应在Event Dispatch Thread上运行耗时的任务。否则应用程序将无响应。
应仅在Event Dispatch Thread上访问Swing组件。
答案 1 :(得分:8)
回答您的具体问题。
如果我想用一些面板制作动画(1分钟),通过移动它们,改变它们的透明度......并且用户只是要看面板而不能使用它们(不是我/ O),现在Timer对于这种情况是个好主意吗?
是的,平滑动画需要一个Timer。
假设您希望每秒显示40帧。这意味着你有25毫秒准备和显示每个面板。
显然,你可以在动画循环之外移动的计算越多越好。现代个人计算机上只需几毫秒即可渲染面板。计算面板,可以轻松地花费超过25毫秒。
所以,对于一分钟的动画,你需要2,400个面板。预先计算这些面板,然后只渲染它们,将导致更平滑的动画。
答案 2 :(得分:6)