为什么在爪哇(一个下javax.swing中,一个在java.util中)两个定时器类?(Why a

2019-07-22 10:51发布

我真搞不清楚这一点。 Java的有两个定时器类,一个下摆动 ,和一个下UTIL ......这是为什么? 我应该使用哪一个,如果我想简单地运行X每Y秒? 这是否意味着,如果我建立一个GUI我不得不使用Swing版本定时器吗?

谢谢!

Answer 1:

这里是javax.swing.Timer中和java.util.Timer中的区别:

javax.swing.Timer
  • 适合于简单的情况下,使用定时器的低编号(说十几以下)
  • 运行事件调度线程上的ActionListener对象
  • 可以直接更新GUI,而不使用EventQueue.invokeLater
  • 如果任务在事件分派线程(也就是说,如果它不产生一个工作线程)完全运行,则GUI将保持只响应如果任务并不需要很长时间(在300毫秒说)

java.util.Timer

  • 比javax.swing.Timer中更可伸缩,并用另外的调度特征
  • 运行在专有线程的TimerTask对象
  • 需要使用EventQueue.invokeLater更新GUI

您可以通过两种方式使用Swing定时器:

  • 一次执行任务,延迟一段时间后。 例如,刀尖经理使用Swing计时器来确定何时显示工具提示,当将其隐藏。
  • 要重复执行的任务。 例如,您可能执行的动画或更新朝着一个目标显示进度的组件。

下面是上述信息的来源http://www.javapractices.com/topic/TopicAction.do?Id=160和http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html

我应该使用哪一个,如果我想简单地运行X每Y秒?

取决于你与互动。 如果您正在使用GUI交互然后用javax.swing.Timer ,否则使用java.util.Timer

这是否意味着,如果我建立一个GUI我不得不使用Swing版本定时器吗?



Answer 2:

秋千版本渲染Swing组件。 如果你只是需要时间,使用UTIL。



Answer 3:

你是那种正确的。 它的建议,如果你打算这样做,将通过定时器的影响UI的工作,你应该使用Swing组件。 该UTIL定时器不能设置UI元素本身。 这里是一个很好的对比 。



Answer 4:

在1.3版本中,另一个Timer类被添加到Java平台:java.util.Timer中。 它和javax.swing.Timer的基本功能相同,但是java.util.Timer更常用,功能更多。 javax.swing.Timer有两个功能可以使它更容易一些使用GUI。 首先,其事件处理所熟悉的,GUI编程,可以使处理事件分派线程简单一点。 其次,它的自动线程共享意味着不必采取特殊步骤来避免生成过多线程。 相反,计时器使用让光标闪烁在同一个线程,工具提示出现,等等。

你可以找到更多的文件,并使用定时器通过访问如何使用定时器,在Java教程一节的几个例子。 更多的例子,并在此Timer类和java.util.Timer中之间进行选择的帮助,请参阅Swing应用程序,在摆动连接的文章中使用定时器。

从官方文档 。



Answer 5:

如果你有一个简单,快捷的工作,需要与摆动框架交互,那么它更容易使用javax.swing.Timer中

对于几乎所有其他情况下 - 即使GUI appliactions如果你有一个图形用户界面,那么你应该使用java.util.Timer中,你必须使用EventQueue.invokeLater更新GUI来处理与Swing事件分派线程整合以同样的方式任何其他任务会正如刚才提到的

一般来说,当你开始,前几个定时器事件看似快速,不太可能影响性能,但是随着需求的变化,他们将需要更长的时间和更多的会出现和GUI本身将增长的需求。 这是一个更好的做法,由刚开始摆动环境之外,以避免返工 - 否则您的GUI将很快出现“迟滞”或“不可用”



文章来源: Why are there two Timer classes in Java(one under javax.swing, one under java.util )?
标签: java swing timer