我对此感到非常困惑。Java 有两个 Timer 类,一个在swing下,一个在util下……这是为什么呢?如果我只想每 Y 秒运行一次 X,我应该使用哪一个?这是否意味着如果我正在构建一个 GUI,我必须使用 swing 版本的计时器?
谢谢!
这里是 javax.swing.Timer 和 java.util.Timer 的区别:
javax.swing.Timer
java.util.Timer
您可以通过两种方式使用 Swing 计时器:
以下是上述信息的来源http://www.javapractices.com/topic/TopicAction.do?Id=160 和http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html
如果我只想每 Y 秒运行一次 X,我应该使用哪一个?
取决于您正在与之交互的内容。如果您正在与 GUI 交互,则使用javax.swing.Timer
,否则使用java.util.Timer
.
这是否意味着如果我正在构建一个 GUI,我必须使用 swing 版本的计时器?
是的
Swing 版本用于渲染 Swing 组件。如果您只需要时间,请使用 util.
你说的有点对。建议如果你要做的 UI 工作会受到计时器的影响,你应该使用 swing 组件。util timer 不能自行设置 UI 元素。这是一个很好的比较。
在 v 1.3 中,Java 平台添加了另一个 Timer 类:java.util.Timer。它和 javax.swing.Timer 都提供相同的基本功能,但 java.util.Timer 更通用,功能更多。javax.swing.Timer 有两个特性可以使它更容易与 GUI 一起使用。首先,它的事件处理隐喻对于 GUI 程序员来说是熟悉的,并且可以使处理事件调度线程更简单一些。其次,它的自动线程共享意味着您不必采取特殊步骤来避免产生太多线程。相反,您的计时器使用与使光标闪烁、工具提示出现等相同的线程。
您可以通过访问 The Java Tutorial 中的 How to Use Timers 部分找到更多文档和几个使用计时器的示例。有关在此 Timer 类和 java.util.Timer 之间进行选择的更多示例和帮助,请参阅在 Swing 应用程序中使用计时器,这是 Swing Connection 中的一篇文章。
来自官方文档。
如果你有一个简单、快速的任务需要与 swing 框架交互,那么使用 javax.swing.Timer 会更简单
对于几乎所有其他情况 - 即使是 GUI 应用程序,您也应该使用 java.util.Timer 如果您有 GUI,那么您必须以与使用 EventQueue.invokeLater 更新 GUI 的任何其他任务相同的方式处理与 swing 事件调度线程的集成正如刚才提到的
通常,当您开始时,前几个计时器事件可能看起来很快并且不太可能影响性能,但随着需求的变化,它们会花费更长的时间并且会出现更多,并且 GUI 本身的需求也会增长。最好的做法是通过在挥杆环境之外开始来避免返工 - 否则您的 GUI 将很快出现“迟钝”或“无法使用”