Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java中有两个计时器类(一个在javax.swing下,一个在Java.util下)?_Java_Swing_Timer - Fatal编程技术网

为什么Java中有两个计时器类(一个在javax.swing下,一个在Java.util下)?

为什么Java中有两个计时器类(一个在javax.swing下,一个在Java.util下)?,java,swing,timer,Java,Swing,Timer,我真的很困惑。Java有两个计时器类,一个在下,一个在下。。。为什么呢?如果我想简单地每Y秒运行X,我应该使用哪一个?这是否意味着如果我在构建GUI,我必须使用swing版本作为计时器 谢谢 Swing版本用于渲染Swing组件。如果您只是需要时间,请使用util。您是对的。建议如果要执行受计时器影响的UI工作,应使用swing组件。util计时器无法设置UI元素本身 在V1.3中,Java平台添加了另一个计时器类: java.util.Timer。它和javax.swing.Timer都提供相

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


谢谢

Swing版本用于渲染Swing组件。如果您只是需要时间,请使用util。

您是对的。建议如果要执行受计时器影响的UI工作,应使用swing组件。util计时器无法设置UI元素本身

在V1.3中,Java平台添加了另一个计时器类: java.util.Timer。它和javax.swing.Timer都提供相同的基本功能 功能,但java.util.Timer更通用,并且具有更多 特征。计时器有两个特性可以使它成为一个 更容易使用GUI。首先,它的事件处理隐喻是 熟悉GUI程序员,能够处理 事件调度线程稍微简单一点。第二,它的自动线程 分享意味着你不必采取特殊步骤来避免 产生太多线程。相反,计时器使用相同的线程 用于使光标闪烁、显示工具提示等

您可以找到更多文档和几个使用 通过访问Java教程中的“如何使用计时器”一节,了解计时器。 有关更多示例和帮助,请选择此计时器类和 Timer,请参阅中的文章“在Swing应用程序中使用计时器” 回转接头


下面是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
您可以通过两种方式使用摆动计时器:

  • 在延迟后执行一次任务。 例如,“工具提示管理器”使用摆动计时器确定何时显示工具提示以及何时隐藏工具提示
  • 重复执行一项任务。 例如,可以执行动画或更新显示目标进度的组件
以下是上述信息的来源,以及

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

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

这是否意味着如果要构建GUI,就必须使用swing版本 一个计时器


如果您有一个简单、快速的任务需要与swing框架交互,那么使用javax.swing.Timer就更简单了

对于几乎所有其他情况,甚至GUI应用程序,都应该使用java.util.Timer 如果您有一个GUI,那么您必须像处理任何其他任务一样处理与swing事件调度线程的集成,使用EventQueue.invokeLater更新GUI,如上所述


通常,在启动时,前几个计时器事件可能看起来很快,不太可能影响性能,但随着需求的变化,它们将花费更长的时间,出现更多的事件,GUI本身的需求也将增加。更好的做法是避免从返工环境中开始返工——否则您的GUI将很快出现“呆滞”或“不可用”< /P> @ Adel。您应该考虑执行器服务框架(如果在java 5或以上)而不是JavaUTI.TIMER。如果需要与GUI交互,请使用javax.swing.Timer,但尽量避免使用它,因为它在GUI线程上运行(特别是对于冗长的操作)。也检查一下这个问题:+1。谢谢你。Java文档在提到这些差异时令人非常困惑?答案尽可能完整/正确:-)不确定您是否感兴趣,但它是一个相当不错的作业调度库。