我可以制作一个在媒体播放完毕之前不会 return 的功能吗?

Can I make a function that does not return until media is finished playing?

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

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; });

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

JavaFX 与所有 UI 工具包一样,是事件驱动的。这意味着您编写响应事件的代码,而不是编写一个大循环来完成您想要的一切。 (假设您从 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);
}