媒体播放结束后,我可以创建一个不返回的功能吗?

时间:2017-04-20 18:29:37

标签: java video javafx javafx-2 javafx-8

我需要一个为我播放视频的功能,并在视频结束时返回,而不是之前。所以当我写“play('video1'); play('video2');”这两个视频必须背靠背播放。我已经多次尝试这样做,但到目前为止所有尝试都不会播放视频或同时播放所有视频。下面我发布了一个播放视频的基本功能,现在我只需要一种延迟返回的方法。有什么想法吗?

private static void play(String name) throws InterruptedException {
    Media media = new Media(uri(name));
    MediaPlayer player = new MediaPlayer(media);
    player.setAutoPlay(true);
    view.setMediaPlayer(player);
}

我尝试了以下内容:

player.setOnEndOfMedia(() -> { return; });

结合函数末尾的无限循环。由于某种原因,这会阻止视频播放。还有更好的主意吗?

1 个答案:

答案 0 :(得分:1)

与所有UI工具包一样,JavaFX是事件驱动的。这意味着您编写的代码可以响应事件,而不是编写一个可以完成所需操作的大循环。 (假设您正在从FX应用程序线程启动媒体播放器,如果您的方法在媒体播放完毕之前没有退出,那么UI将无法更新或响应任何用户事件,直到媒体完成,这不是你想要发生什么。)

所以你需要使用onEndOfMedia处理程序播放下一个媒体,如果有另一个媒体播放:

private String[] videos = {"video1", "video2"};
private int currentVideoIndex = 0 ;

private void playNextVideo() {
    Media media = new Media(uri(videos[currentVideoIndex]));
    currentVideoIndex++ ;
    MediaPlayer player = new MediaPlayer(media);
    player.setOnEndOfMedia(() -> {
        if (currentVideoIndex < videos.length) {
            playNextVideo();
        }
    });
    player.setAutoPlay(true);
    view.setMediaPlayer(player);
}