You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX应用中为淡出动画添加计时器的问题求助

解决JavaFX启动界面淡出后清空UI的问题

问题根源

  1. 线程异常原因:你使用的java.util.Timer会在后台线程执行任务,而JavaFX的UI组件仅允许在FX应用线程中操作,直接调用Ce.console.getChildren().clear()必然触发IllegalStateException。
  2. 时间逻辑错误:淡出动画时长设置为3000毫秒,但Timer仅等待300毫秒就执行清空操作,动画未结束就修改UI,导致效果不符合预期。

修正方案

直接利用FadeTransition的setOnFinished方法,在动画结束后自动执行后续逻辑,无需额外Timer:

public static void fadeOut() {
    FadeTransition ft = new FadeTransition(Duration.millis(3000), vb);
    ft.setFromValue(1);
    ft.setToValue(0);
    
    // 动画完成后执行清空与启动逻辑
    ft.setOnFinished(event -> {
        Ce.console.getChildren().clear();
        startTrue();
    });
    
    ft.play();
}

方案说明

  • setOnFinished的回调方法会自动在FX应用线程中执行,彻底规避线程异常问题。
  • 确保淡出动画完全结束后再清空UI,逻辑连贯,符合界面过渡的预期效果。

如果偏好使用Timeline实现,也可以采用以下写法(效果一致):

public static void fadeOut() {
    Timeline timeline = new Timeline(
        new KeyFrame(Duration.ZERO, new KeyValue(vb.opacityProperty(), 1)),
        new KeyFrame(Duration.millis(3000), 
            event -> {
                Ce.console.getChildren().clear();
                startTrue();
            },
            new KeyValue(vb.opacityProperty(), 0)
        )
    );
    timeline.play();
}

内容的提问来源于stack exchange,提问作者Providence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 04:18:14