javafx 利用mediaPlayer.setOnEndOfMedia()循环播放不同视频
时间: 2023-10-09 21:04:21 浏览: 188
可以使用以下代码实现循环播放不同视频:
```
Media[] mediaList = new Media[]{
new Media(new File("video1.mp4").toURI().toString()),
new Media(new File("video2.mp4").toURI().toString()),
new Media(new File("video3.mp4").toURI().toString())
};
MediaPlayer mediaPlayer = new MediaPlayer(mediaList[0]);
mediaPlayer.setOnEndOfMedia(() -> {
int currentIndex = Arrays.asList(mediaList).indexOf(mediaPlayer.getMedia());
int nextIndex = (currentIndex + 1) % mediaList.length;
mediaPlayer.stop();
mediaPlayer.dispose();
mediaPlayer = new MediaPlayer(mediaList[nextIndex]);
mediaPlayer.setOnEndOfMedia(mediaPlayer::play);
mediaPlayer.play();
});
mediaPlayer.play();
```
这里首先定义了一个 `Media` 数组来存储多个视频文件,然后初始化了一个 `MediaPlayer` 对象,并将第一个视频文件作为参数传递给它。接着设置了 `setOnEndOfMedia` 事件监听器,当当前视频播放结束时,会执行事件监听器中的代码,该代码会获取当前视频在 `mediaList` 数组中的索引值,计算出下一个视频的索引值,并创建一个新的 `MediaPlayer` 对象来播放下一个视频。
需要注意的是,在切换视频之前要先停止并释放当前的 `MediaPlayer` 对象,否则会出现无法播放下一个视频的问题。此外,循环播放需要将下一个视频的 `setOnEndOfMedia` 事件监听器设置为 `mediaPlayer::play`,这样下一个视频播放结束时,会自动重新播放当前视频。
阅读全文