我对此感到很困惑。 Java有两个Timer类,一个在swing下,一个在util下......为什么会这样?如果我想每Y秒运行一次X,我应该使用哪一个?这是否意味着如果我正在构建GUI,我必须使用swing版本作为计时器?
谢谢!
答案 0 :(得分:31)
以下是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版本 对于计时器?
YES
答案 1 :(得分:2)
Swing版本用于渲染swing组件。如果您只需要时间,请使用util。
答案 2 :(得分:2)
你是对的。如果您要进行受定时器影响的UI工作,建议您使用swing组件。 util计时器无法自行设置UI元素。 Here is a nice comparison
答案 3 :(得分:2)
在v 1.3中,另一个Timer类被添加到Java平台: java.util.Timer中。它和javax.swing.Timer都提供相同的基本功能 功能,但java.util.Timer更通用,有更多 特征。 javax.swing.Timer有两个功能可以使它成为一个 GUI更容易使用。首先,它的事件处理比喻是 对GUI程序员来说很熟悉并可以处理 事件调度线程更简单一点。第二,它的自动线程 共享意味着您不必采取特殊措施来避免 产生太多线程。相反,您的计时器使用相同的线程 用于使光标闪烁,出现工具提示等。
您可以找到更多文档和几个使用示例 计时器通过访问如何使用计时器,这是“Java教程”中的一节。 有关更多示例和帮助选择此Timer类和 java.util.Timer,请参阅使用Swing应用程序中的计时器 Swing Connection。
答案 4 :(得分:2)
如果你有一个简单,快速的任务需要与swing框架交互,那么使用javax.swing.Timer更简单
对于几乎所有其他情况 - 甚至GUI应用程序,您应该使用java.util.Timer 如果你有一个GUI,那么你必须处理与swing事件调度线程的集成,就像使用EventQueue.invokeLater更新GUI一样,任何其他任务都会如上所述
通常,当您启动时,前几个计时器事件可能看起来很快并且不太可能影响性能,但随着需求的变化,它们将花费更长时间,并且会出现更多,并且GUI本身的需求将会增长。通过在摆动环境之外启动来避免返工是一种更好的做法 - 否则您的GUI将很快出现“缓慢”或“无法使用”