我希望我的程序在PathTransition
完成后执行某些操作。所以我创建了一个运行动画的线程,以及join()方法让程序等待这个线程。这是我在下面的试用代码
public class JavaFXApplication6 extends Application {
@Override
public void start(Stage primaryStage) {
ImageView iv = new ImageView(new Image("File:1.JPG"));
iv.setFitHeight(80);
iv.setFitWidth(50);
PathTransition pt = new PathTransition();
pt.setNode(iv);
pt.setCycleCount(1);
pt.setDuration(Duration.seconds(2));
pt.setPath(new Path(new MoveTo(0, 0), new LineTo(200, 200)));
AnchorPane root = new AnchorPane();
root.getChildren().add(iv);
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
Thread t = new Thread (){
public void run(){
pt.play();
}
};
t.start();
try {
t.join();
}catch(InterruptedException w){}
System.out.println("I should be printed after the animation!");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
但是,在动画结束之前打印出String。为什么会这样?是不是在join()之后会等待该线程死掉的交易?
如果线程无法实现这一点,我可以用什么技巧让程序等待动画,不使用 .setOnFinished()
?
答案 0 :(得分:2)
正在加载https://docs.oracle.com/javafx/2/api/javafx/animation/Animation.html#play():
Animation#play()
(PathTransition
继承它)是一个异步调用,这意味着它可能会进入一个新线程,而不是链接到您启动的线程,该线程在该调用之后立即结束。