Java 为什么我的程序不在线程中等待动画?

Java 为什么我的程序不在线程中等待动画?,java,multithreading,animation,concurrency,javafx,Java,Multithreading,Animation,Concurrency,Javafx,我希望我的程序在路径转换完成后执行某些操作。因此,我创建了一个线程来运行动画,并使用join()方法让程序等待该线程。下面是我的试用码 public class JavaFXApplication6 extends Application { @Override public void start(Stage primaryStage) { ImageView iv = new ImageView(new Image("File:1.JPG"));

我希望我的程序在
路径转换
完成后执行某些操作。因此,我创建了一个线程来运行动画,并使用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);
    }
}
但是,字符串在动画结束之前打印出来。为什么会发生这种情况?join()之后的任何东西都会等待线程死亡,这不是一个约定吗?
如果线程无法实现这一点,我可以使用什么技巧让程序等待动画,而不使用
.setOnFinished()

根据:
Animation#play()
PathTransition
继承它)是一个异步调用,这意味着它可能在一个新线程上运行,而不是链接到您启动的线程,该线程在该调用后立即结束。

pt.play()
计划在JavaFX应用程序线程上运行动画并立即返回。因此,没有必要为动画启动新线程
setOnFinished()
是正确的方法。“有什么问题吗?”我不知道。似乎“setOnFinished()”使程序线性化如果有几个动画要逐个播放……你说的“使程序线性化”是什么意思?那么如何等待该动画?你自己已经回答过了。要在动画结束后执行代码,请使用setOnFinished(…)。@James\u D这是唯一的方法吗?@James\u D:您好,您能帮我解决这个问题吗?stackoverflow.com/q/27182323/2722799基本上有相同的方法,但这是唯一有效的方法。为什么你需要一种不同的方式?