如何等到计时器在java中停止?

Posted

技术标签:

【中文标题】如何等到计时器在java中停止?【英文标题】:How to wait until timer is stopped in java? 【发布时间】:2018-06-23 06:07:12 【问题描述】:

我有一个方法,就是调用一个swing timer来启动,调用这个方法后,我必须等到执行的定时器停止。我试过了

while(timer.isRunning()

但它没有用,它只是冻结了我的程序。请帮助我并原谅我的英语不好。

【问题讨论】:

什么是定时器? 定时器完成后不调用方法吗?你不能用那个吗? 您到底想达到什么目标?如果您需要等待计时器任务完成,也许您可​​以轻松地使用CompletableFuture#supplyAsync。其他可能性是Executor 或计时器内部的逻辑以某种方式广播“执行完成”事件(类似于侦听器的模式或简单的方法调用)。 此外,如果while(timer.isRunning() 正在冻结程序,则意味着您正在某些关键(UI?)线程上执行此操作,在这种情况下,您需要一些异步方式来处理计时器完成事件。 是的,我正在使用 UI,当按下键盘上的 x 键时计时器结束 【参考方案1】:

你现在正在做的事情是非常糟糕的做法,因为你强迫你的程序运行一个没有任何意义的循环。想象一下计时器永远不会返回,在这种情况下,您创建了一个无限循环。

试试 thread.sleep()。在 sleep() 之前启动计时器。如果完成,计时器将抛出 InterruptedException。更好的是:如果您自然醒来,那么您应该决定是否要再次入睡并继续等待计时器,或者您是否想抛出错误/做其他事情。

try 
  Thread.sleep(10000);
 catch (InterruptedException e) 

【讨论】:

@Yoshie2000 如果您在事件调度程序线程 (EDT) 上执行它,这将与您的 while 循环具有相同的效果。 查看这里了解更多详情:java2s.com/Tutorial/Java/0240__Swing/SwingTimers.htm 这对我不起作用。也许还有其他方法?我需要计时器中的用户输入,这可能会有所帮助 您必须告诉我们更多信息。您是否将一个线程用于计时器和 while 循环?你想达到什么目的?所有回复都基于迄今为止的计时器的常见用法,因为您只给了我们一行代码。您对计时器内的用户输入是什么意思?您使用用户选择的时间来启动计时器?请给我们更多代码。【参考方案2】:

作为解决方案,我使用整数来跟踪我的方法的迭代次数。当整数大于某个数时,我就知道时间已经过去了。

【讨论】:

以上是关于如何等到计时器在java中停止?的主要内容,如果未能解决你的问题,请参考以下文章

如何停止在 C# 类中运行的计时器

如何在 ReactJS 中启动和停止计时器显示

连续暂停/停止和启动/恢复Java TimerTask?

当活动暂停时,如何正确停止倒数计时器中的媒体播放器?

c# - 如何立即停止计时器

在java中如何让定时器只启动一次?