javafx 用mediaPlayer.setOnEndOfMedia()循环播放不同视频
时间: 2024-02-03 12:13:59 浏览: 110
可以通过设置MediaPlayer的OnEndOfMedia事件来实现循环播放不同视频。具体步骤如下:
1. 创建一个MediaPlayer对象,并将其与第一个视频文件关联。
```
MediaPlayer mediaPlayer = new MediaPlayer(new Media("file:/path/to/first/video.mp4"));
```
2. 设置MediaPlayer的OnEndOfMedia事件,当播放完成时,根据需要切换到下一个视频文件。
```
mediaPlayer.setOnEndOfMedia(() -> {
// 切换到下一个视频文件
String nextVideoFile = getNextVideoFile(); // 获取下一个视频文件的路径
mediaPlayer.stop();
mediaPlayer = new MediaPlayer(new Media("file:" + nextVideoFile));
mediaPlayer.setOnEndOfMedia(() -> mediaPlayer.seek(Duration.ZERO)); // 循环播放当前视频
mediaPlayer.play();
});
```
在这里,我们通过调用getNextVideoFile()方法获取下一个视频文件的路径,并创建一个新的MediaPlayer对象来播放它。我们还将OnEndOfMedia事件设置为使MediaPlayer在播放完成后重新开始当前视频。
3. 开始播放第一个视频文件。
```
mediaPlayer.play();
```
完整代码示例如下:
```
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Main extends Application {
private String[] videoFiles = {
"/path/to/first/video.mp4",
"/path/to/second/video.mp4",
"/path/to/third/video.mp4"
};
private int currentVideoIndex = 0;
@Override
public void start(Stage primaryStage) throws Exception {
// 创建一个MediaPlayer对象,并将其与第一个视频文件关联
MediaPlayer mediaPlayer = new MediaPlayer(new Media("file:" + videoFiles[currentVideoIndex]));
// 设置OnEndOfMedia事件
mediaPlayer.setOnEndOfMedia(() -> {
// 切换到下一个视频文件
currentVideoIndex = (currentVideoIndex + 1) % videoFiles.length;
mediaPlayer.stop();
mediaPlayer = new MediaPlayer(new Media("file:" + videoFiles[currentVideoIndex]));
mediaPlayer.setOnEndOfMedia(() -> mediaPlayer.seek(Duration.ZERO)); // 循环播放当前视频
mediaPlayer.play();
});
// 开始播放第一个视频文件
mediaPlayer.play();
// 创建一个StackPane,并将MediaPlayer的View添加到其中
StackPane root = new StackPane(mediaPlayer.getView());
// 创建一个Scene,并将StackPane添加到其中
Scene scene = new Scene(root, 800, 600);
// 设置Stage的Scene,并显示Stage
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
```
在这个例子中,我们定义了一个videoFiles数组来存储要播放的视频文件列表。在OnEndOfMedia事件中,我们使用currentVideoIndex变量来跟踪当前正在播放的视频文件,并使用模运算符来循环遍历videoFiles数组。
阅读全文