首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Java语言中有两个Timer类(一个在javax.swing下,一个在java.util下)?

为什么Java语言中有两个Timer类(一个在javax.swing下,一个在java.util下)?
EN

Stack Overflow用户
提问于 2013-03-22 03:45:48
回答 5查看 6.1K关注 0票数 10

我对此真的很困惑。Java有两个Timer类,一个在swing下,另一个在util下...为什么会这样呢?如果我想简单地每Y秒运行一次X,我应该使用哪一个?这是否意味着如果我正在构建GUI,我必须使用swing版本的计时器?

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-22 03:57:54

以下是javax.swing.Timer和java.util.Timer之间的区别:

代码语言:javascript
运行
复制
javax.swing.Timer

  • 适用于较简单的情况,使用较少的计时器(比方说少于12个)
  • 在事件分派线程上运行ActionListener对象
  • 可以直接更新图形用户界面,而无需使用任务完全在事件分派线程中运行(即,如果它不产生工作线程),则仅当任务花费的时间不是很长(比方说低于300 milliseconds)

)时,图形用户界面才会保持响应

java.util.Timer

图形用户界面比javax.swing.Timer更具可伸缩性,并且通过在专用线程上额外调度features

  • runs TimerTask对象,

  • 需要使用EventQueue.invokeLater来更新

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

  • 在一段延迟后执行一次任务。例如,工具提示管理器使用Swing计时器来确定何时显示和何时隐藏工具提示。
  • 可重复执行任务。例如,您可以执行动画或更新显示实现目标的进度的组件。

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

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

这取决于您与之交互的内容。如果你正在与图形用户界面交互,那么使用javax.swing.Timer,否则使用java.util.Timer

这是不是意味着如果我正在构建一个图形用户界面,我必须使用swing版本的计时器?

票数 31
EN

Stack Overflow用户

发布于 2013-03-22 03:49:03

Swing版本用于呈现swing组件。如果只需要计时,可以使用util。

票数 2
EN

Stack Overflow用户

发布于 2013-03-22 03:49:12

你是对的。建议您如果要执行将受计时器影响的UI工作,则应使用swing组件。util计时器本身不能设置UI元素。Here is a nice comparison

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15556646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档