下一个MediaPlayer上的JavaFX setOnEndOfMedia

问题描述 投票:0回答:1

我有List<MediaPlayer>正在填充

private List<MediaPlayer> players() {

    for (String file : path.list((dir1, name) -> {
        if (name.endsWith(SUPPORTED_VIDEO_FILE_EXTENSIONS)){
            return true;
        }
        return false;
    })) {
        players.add(createPlayer(Paths.get(path + "/" + file).toUri().toString()));
        System.out.println(Paths.get(path + "/" + file).toUri().toString());
    }
    return players;
}

在我的情况下,List<MediaPlayer>的大小为3。比我在这里使用的大

if (currentNumOfVideo == -1) {
    currentNumOfVideo = 0;
}
mv = new MediaView();
MediaPlayer currentPlayer = players.get(currentNumOfVideo);
mv.setMediaPlayer(currentPlayer);
currentPlayer.play();

players.get(currentNumOfVideo).setOnEndOfMedia(() -> {
    players.get(currentNumOfVideo).stop();
    if (currentNumOfVideo < players.size()) {
        currentNumOfVideo += 1;
        mv.setMediaPlayer(players.get(currentNumOfVideo));
        players.get(currentNumOfVideo).play();
    } else {
        currentNumOfVideo = 0;
        mv.setMediaPlayer(players.get(currentNumOfVideo));
        players.get(currentNumOfVideo).play();
    }
});

第一个视频播放结束后,第二个视频开始播放。在第二个视频之后,MediaPlayer停止并且没有播放第三个视频。

我了解,因为我的setOnEndOfMedia仅在第一个MediaPlayer上。当第二个视频开始播放时,它没有setOnEndOfMedia。如何在setOnEndOfMedia中的每个视频上显示List<MediaPlayer>

javafx media mediaview
1个回答
0
投票
就我个人而言,我不会提前创建所有的MediaPlayer实例。而是获取Media对象的列表或至少指向媒体的URI。然后创建一个方法,当当前视频结束时负责播放下一个视频。该方法将处置旧的MediaPlayer,创建下一个MediaPlayer,并将其配置为在完成后调用相同的方法。例如:
© www.soinside.com 2019 - 2024. All rights reserved.