如何等到计时器在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中停止?的主要内容,如果未能解决你的问题,请参考以下文章