为什么我的程序不等待Thread中的动画?

时间:2014-11-27 22:16:16

标签: java multithreading animation concurrency javafx

我希望我的程序在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()

1 个答案:

答案 0 :(得分:2)

正在加载https://docs.oracle.com/javafx/2/api/javafx/animation/Animation.html#play()Animation#play()PathTransition继承它)是一个异步调用,这意味着它可能会进入一个新线程,而不是链接到您启动的线程,该线程在该调用之后立即结束。