时间线不是无限运行的(JavaFx)
我曾经有一个简单的、定时的(或多或少)无限循环:时间线不是无限运行的(JavaFx),java,loops,javafx,timeline,infinite,Java,Loops,Javafx,Timeline,Infinite,我曾经有一个简单的、定时的(或多或少)无限循环: while (!canrun) { do_stuff(); //simple calculation update_gui(); //updates some labels Thread.sleep(waittime); } 这会自然地冻结JavaFX应用程序,直到完成所有计算(canrun设置为false) 我将其替换为时间线: event = new EventHandler<ActionEvent&g
while (!canrun) {
do_stuff(); //simple calculation
update_gui(); //updates some labels
Thread.sleep(waittime);
}
这会自然地冻结JavaFX应用程序,直到完成所有计算(canrun设置为false)
我将其替换为时间线:
event = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
do_stuff();
update_gui();
}
};
keyframe = new KeyFrame(Duration.millis(waittime), event);
timeline = new Timeline(Timeline.INDEFINITE, keyframe);
(此处的waittime是一个介于1和1000(ms)之间的数字)。
在按钮上单击我以timeline.play()开始,在do_stuff()中,我在计算完成timeline.stop()后停止它
我还有一个函数可以更改等待时间(即使在它运行时):
现在我的问题是,时间线只运行一次,而不是连续运行,它甚至不会再次输入do_stuff(),除非我再次调用Timeline.play()。即使直接调用timeline.setCycleCount(timeline.unfinite)也无济于事
我错过了什么
编辑:我找不到我的错误,所以我重新编写了完整的GUI,现在它可以工作了。在时间轴构造函数中,您正在使用循环计数的常量设置帧速率
使用 通过重写我的完整GUI和时间线解决了这个问题。我不知道为什么它以前不起作用,但现在它起作用了
public void do_stuff() {
do_the_actual_stuff();
if (stuff_finished) timeline.stop();
}
public void changewaittime() {
if (!(timeline.getStatus() == Animation.Status.RUNNING)) {
keyframe = new KeyFrame(Duration.millis(waittime), event);
timeline = new Timeline(Timeline.INDEFINITE, keyframe);
} else {
timeline.stop();
keyframe = new KeyFrame(Duration.millis(waittime), event);
timeline = new Timeline(Timeline.INDEFINITE, keyframe);
timeline.play();
}
}