当前位置: 首页 > 面试题库 >

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

汪翰墨
2023-03-14
问题内容

我对此真的感到困惑。Java有两个Timer类,一个在swing下,一个在util下,为什么?如果我想每隔Y秒简单地运行X,应该使用哪一个?这是否意味着如果我要构建GUI,则必须使用摆动版本的计时器?

谢谢!


问题答案:

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

javax.swing.Timer
  • 适用于较简单的情况,使用较少的计时器(例如少于十二个)
  • 在事件分配线程上运行ActionListener对象
  • 可以直接更新GUI,而无需使用EventQueue.invokeLater
  • 如果任务完全在事件分发线程中运行(也就是说,如果它没有产生工作线程),则仅当任务花费的时间不长(例如不到300毫秒)时,GUI才会保持响应状态。

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

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

取决于您与之互动的内容。如果要与GUI交互,请使用javax.swing.Timer,否则请使用java.util.Timer

这是否意味着如果我要构建GUI,则必须使用摆动版本的计时器?



 类似资料:
  • 在将Eclipse项目导入Android Studio之后,我看到了两个文件: 第一个版本较短,第二个版本包含等的定义。

  • 问题内容: 为什么B类无法公开?如何在其他班级使用班级?在Cons中定义它更好吗? 问题答案: 根据Java语言规范,文件(.java)中只能有一个公共类,并且文件名应与公共类名相同。 如果希望在其他地方访问B类,则可以创建一个单独的B.java文件,然后将B类代码移至该文件。 该线程可以为您提供更多信息。

  • 问题内容: 我知道Java不允许我们扩展多个类。我知道接口也存在,并且我这次不想使用它们。是否存在某种技巧或解决方法来扩展Java中的多个类?如果是,请同时提供示例代码。 问题答案: 您可以使用界面和组合 轻松 完成此操作。 问题是为什么你会问这样的事情?为什么不希望在“此时”使用接口? 您必须知道Java仅允许实现的单一继承。您在SO上度过了七个月,因此,您肯定必须知道如何使用搜索功能。这个问题

  • 问题内容: 在JDK 1.7中,存在一个声明。 他们为什么要制造新的而不使用: 问题答案: 因为通过返回的 后盾 给定的数组。它包装该数组;数组的更改反映在中,反之亦然。 另外,因此,返回的此处具有固定大小。因此,它不能是因为可以增长或收缩。

  • 问题内容: 为什么必须将主方法放入类中?我了解OOP的主要思想,但无法理解为什么在类中定义主程序。这样的课程会在某处实例化吗?我的意思是课外没有代码。定义类而不使用该类对象的原因是什么? 问题答案: 在 Java虚拟机 (JVM)的启动应用程序的某个地方。由于Java没有“类之外的东西”的概念,因此JVM调用的方法必须 在 类中。并且由于它是静态的,因此尚未创建该类的实例。

  • 问题内容: 好的,这可能是java中的小问题。我们不能在一个文件中定义两个公共类。但是,在《 SCJP学习指南》一书的示例中,提到了以下示例: 当我将其复制粘贴到netbeans中时,立即引发了编译错误,该公共类A应该在单独的文件中提及。SCJP stdydy指南中的示例真的错误吗?同样在一些模拟测试中,我发现许多问题都具有这种模式,但是在所有选项中都没有提到编译器错误。在这里担心 问题答案: 是