等待PathTransition完成,直到JavaFX的

问题描述:

我想实现这样的使用JavaFX程序从函数返回:等待PathTransition完成,直到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作为PathTransition来更改标志,当它完成后,然后使用while(true)等待,直到标志被设置为true,然后调用foo.move()方法。这也不起作用,并使我的程序崩溃。

Thread.sleep()方法也没有工作,我想要的方式(所有的动作都是一个延迟之后,但在同一时间内完成)。

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

像你这样的,如果你使用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(); 
} 
+0

非常感谢您的帮助。等待转换完成从函数返回后怎么办? – Karegar

+0

不,你不能这样做,因为你阻塞了负责执行动画和'onFinished'处理程序的应用程序线程。 (除非你使用非公开的API或java9的API,见https://*.com/questions/46369046/how-to-wait-for-user-input-on-javafx-application-thread-without-using -showandwai) – f*