等待PathTransition完成,直到从JavaFX中的函数返回

时间:2017-11-17 22:01:34

标签: java javafx

我尝试使用JavaFX实现这样的程序:

我们在场景中有许多Type Foo的对象(用圆圈表示) 它们中的每一个都有一个名为move()的方法,它将对象移动到场景中的另一个位置。然后它找到另一个对象(通过调用另一个方法)并在找到的对象上调用move方法。它是这样的:

class Foo {
    Circle circle;
    void move() {
        // change circle location
        // HERE, I WANT TO WAIT UNTIL CIRCLE HAS MOVED ON THE SCENE
        Foo f = findNextFoo();
        foo.move();
    }
}

我想要圈子'移动对用户是可见的和顺序的,但是当我定期使用PathTransition时,所有对象(几乎)同时移动,因为每个PathTransition都在一个新线程上运行,在play()之后,函数将会继续并调用findNextFoo()方法。

我尝试使用setOnFinished for PathTransition在完成后更改标志,然后使用while(true)等待标志设置为true然后调用foo.move()方法。这也不起作用,使我的程序崩溃。

Thread.sleep()也没有按照我想要的方式工作(所有动作都是在延迟但同时完成的。)

任何帮助都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

如果您使用while(true)Thread.sleep,则不得像阻止应用程序线程一样。

如果您能够提前确定所有转换,则可以使用SequentialTransition

但是,使用onFinished事件可能需要较少的代码修改。只需从事件处理程序开始下一个转换,而不是使用标志+无限循环:

void move() {
    PathTransition transition = ...

    transition.setOnFinished(event -> {
        // after transition is finished continue with next one
        Foo f = findNextFoo();
        foo.move();
    });
    transition.play();
}