JavaFX应用中为淡出动画添加计时器的问题求助
解决JavaFX启动界面淡出后清空UI的问题
问题根源
- 线程异常原因:你使用的
java.util.Timer会在后台线程执行任务,而JavaFX的UI组件仅允许在FX应用线程中操作,直接调用Ce.console.getChildren().clear()必然触发IllegalStateException。 - 时间逻辑错误:淡出动画时长设置为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
相关产品推荐
相关产品推荐

