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基本上有相同的方法,但这是唯一有效的方法。为什么你需要一种不同的方式?