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

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

while(timer.isRunning(){}

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

【问题讨论】:

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

标签: java timer wait sleep


【解决方案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】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多