如何在JavaFX中使用定时器让程序暂停一秒后执行操作?
JavaFX 替代 Swing Timer 的单次延迟任务实现
嘿,我懂你找了好久的那种困扰!在JavaFX里完全有原生的方式实现你要的单次延迟任务,根本不用碰Swing的Timer类~
你之前用Swing Timer实现了1秒后单次输出的功能,对应的JavaFX实现可以用**javafx.animation.Timeline**,它是JavaFX专门用来处理时间线任务的类,而且天然适配JavaFX的应用线程,避免了线程安全问题。
对应你的需求的代码实现
import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.util.Duration; // 注意:这段代码要在JavaFX应用线程中执行(比如Application类的start方法内) Timeline delayTimeline = new Timeline(new KeyFrame( Duration.millis(1000), // 延迟1000毫秒,和你之前的设置一致 event -> { // 延迟后执行的任务 System.out.println("Hello there"); } )); delayTimeline.setCycleCount(1); // 设置只执行一次,对应Swing Timer的setRepeats(false) delayTimeline.play(); // 启动任务
额外说明
- 如果之后需要实现重复执行的任务,只需要把
setCycleCount(1)改成setCycleCount(Timeline.INDEFINITE)就可以,效果和Swing Timer的setRepeats(true)一致。 - 如果你需要更复杂的后台定时任务(比如耗时操作),可以考虑用
javafx.concurrent.ScheduledService,不过对于这种简单的单次UI线程任务,Timeline足够轻量好用。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

