【发布时间】:2014-04-24 19:23:36
【问题描述】:
我曾经有一个简单的、定时的(或多或少)无限循环:
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);
do_stuff() 看起来像这样:
public void do_stuff() {
do_the_actual_stuff();
if (stuff_finished) timeline.stop();
}
(这里的等待时间是一个介于 1 和 1000 (ms) 之间的数字)。 在 Buttonclick 上,我使用timeline.play() 启动它,在do_stuff() 中,当计算完成时使用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();
}
}
现在我的问题是,时间轴只运行一次,而不是连续运行,它甚至不会再次进入 do_stuff(),只有当我再次调用timeline.play() 时。甚至直接调用timeline.setCycleCount(Timeline.INDEFINITE) 也无济于事。
我错过了什么?
编辑:我找不到我的错误,所以我重写了完整的 GUI,现在它可以工作了。
【问题讨论】:
标签: java loops javafx timeline infinite