【问题标题】:Timeline is not running infinitely (JavaFx)时间线未无限运行(JavaFx)
【发布时间】: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


    【解决方案1】:

    在 Timeline 构造函数中,您使用一个用于循环计数的常量来设置帧速率。

    使用http://docs.oracle.com/javafx/2/api/javafx/animation/Animation.html#setCycleCount(int)

    【讨论】:

      【解决方案2】:

      通过重写我的完整 GUI 和时间线解决了这个问题。不知道为什么它以前不起作用,但现在它起作用了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        相关资源
        最近更新 更多