我只需要在特定时间过去一次后执行一个动作。我尝试过以下方法:
Timeline contador = new Timeline(new KeyFrame(
Duration.seconds(4),
acción -> System.out.println("acción acontecida")));
contador.play();
}
它似乎工作正常,但我想知道这是否是最好的方式,或者是否有另一种更推荐的方式。
我只需要在特定时间过去一次后执行一个动作。我尝试过以下方法:
Timeline contador = new Timeline(new KeyFrame(
Duration.seconds(4),
acción -> System.out.println("acción acontecida")));
contador.play();
}
它似乎工作正常,但我想知道这是否是最好的方式,或者是否有另一种更推荐的方式。
要重复执行任务,有几种选择:
第一个非常简单的实现方法是使用
Timer
andTimerTask
,两者都来自 java.util 包:使用这种方法时需要牢记一些非常重要的注意事项: TimerTask 中抛出的异常会终止 Timer 线程,不可能重新启动它,因此您必须进行异常处理。如果我们启动任务
schedule
并且它花费的时间超过了规定的时间(假设它比建立的 2 秒多花费 3 秒),那么下一个任务将在接下来的 3+2 秒之前执行。情况正好scheduleAtFixedRate
相反;而不是在 3+2 秒执行,它将在 1 秒运行以尝试调整(前一个任务消耗了 2 秒加上新任务的 1 秒)。根据您的要求,您必须以一种或另一种方式对其进行配置。另一种方法是使用
ScheduledExecutorService
以下实现ExecutorService
:ScheduledExecutorService 允许您安排任务定期运行和/或延迟启动,就像 Timer 一样,但它更灵活,与 Timer 不同,如果在它处理的任何任务中生成异常,它不会停止。
以下帖子将指导您更多关于 Timer 和 ExecutorService 之间的主要区别和好处:https ://stackoverflow.com/questions/409932/java-timer-vs-executorservice
最后,
Timeline
它的目的更明确,面向 JavaFX 中的动画。我建议您使用上述两种方法之一。