如何等待JavaFx MediaPlayer完成

时间:2018-12-17 00:22:28

标签: javafx

我有一个MediaPlayer对象正在播放视频。视频播放完后,我希望程序隐藏MediaView并显示不同的JavaFx实体。但是,当我调用player.play()时,程序会立即解释后面的代码行,导致MediaView根本看不到。

public class Level1Controller implements Initializable {

    File file = new File("ngnl.mp4");
    Media media = new Media(file.toURI().toString());
    MediaPlayer player = new MediaPlayer(media);
    @FXML
    MediaView view = new MediaView();


    /**
     * Initializes the controller class.
     */

    @Override
    public void initialize(URL url, ResourceBundle rb) {

        view.setMediaPlayer(player);
        player.play();

        view.setVisible(false); 
    }
}

更多按钮,并且这些按钮将位于JavaFx层次结构中的MediaView之下,因此,将其隐藏时,将看到底层的内容。

1 个答案:

答案 0 :(得分:1)

找不到任何提及此问题的官方文档,但是我敢肯定,JavaFX将在媒体文件的后台在单独的线程上播放媒体文件,以便不会阻塞UI线程。这就是为什么您需要使用MediaPlayer.setOnEndOfMedia

view.setMediaPlayer(player);

player.setOnEndOfMedia(() -> {
    view.setVisible(false); 
});    

player.play();