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

等待PathTransition完成,直到从JavaFX中的函数返回,java,javafx,Java,Javafx,我正在尝试使用JavaFX实现这样的程序: 我们在场景中有许多Foo类型的对象(以圆圈显示)。 它们中的每一个都有一个名为move()的方法,可以将对象移动到场景中的另一个位置。然后它找到另一个对象(通过调用另一个方法)并对找到的对象调用move方法。是这样的: class Foo { Circle circle; void move() { // change circle location // HERE, I WANT TO WAIT UNT

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

我们在场景中有许多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()
方法。这也不起作用,使我的程序崩溃

sleep()也不能按我想要的方式工作(所有的动作都是在一段延迟后同时完成的)


如果您使用
while(true)
thread.sleep
,请不要像使用
那样阻止应用程序线程

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

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

void move() {
    PathTransition transition = ...

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

非常感谢你的帮助。等待转换完成从函数返回怎么样?不,您不能这样做,因为您正在阻止负责执行动画和
onFinished
处理程序的应用程序线程。(除非您使用的是非公共api或java9的api,请参阅)