所以我使用的是JavaFX,并且想要设置一个实验,我必须播放许多视频并与用户进行交互。对于这种设置,我想编写一个函数来接收文件名并用该名称播放视频。但它只能在视频播放结束后才会返回,而不是之前。所以像这样:(帮助仍然需要)如何制作视频播放结束时播放的playvideo功能?
private void play(URI name){
MediaPlayer mediaPlayer = new MediaPlayer(new Media(name));
mediaPlayer.setAutoPlay(true);
view.setMediaPlayer(mediaPlayer);
}
但是,这个函数返回视频结束之前,使程序的执行一团糟。我知道MediaPlayer有一个setOnEndOfMedia(Runnable)函数,但我不确定我可能如何使用它来实现我的目标。
这是我现在的代码。但它不起作用。问题在于两个视频都在同一时间播放,可能是因为播放函数一开始播放视频就会返回。我也尝试在播放函数的末尾添加一段while(true)循环,以便它在那里停留,直到返回;在.setOnEndOfMedia被调用,这阻止了任何视频的播放。
CODE:
static MediaView view;
@Override
public void start(Stage stage) throws IOException, URISyntaxException, InterruptedException {
// Create full screen scene
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
stage.setFullScreen(true);
Scene scene = new Scene(new Group(), dim.getWidth(), dim.getHeight());
stage.setScene(scene);
stage.show();
// Create the view and add it to the Scene.
view = new MediaView();
((Group)scene.getRoot()).getChildren().add(view);
play("videol");
play("video2");
}
private static void play(String name) throws InterruptedException {
Media media = new Media(uri(name));
MediaPlayer player = new MediaPlayer(media);
player.setOnReady(() -> {
player.play();
player.setOnEndOfMedia(() -> {
player.dispose();
return;
});
});
view.setMediaPlayer(player);
}
private static String uri(String name) {
return Paths.get("clips/" + name + ".mp4").toUri().toString();
}
public static void main(String[] args) {
launch(args);
}
我试过你的代码,我通过返回替换MusicPlayer()。但是,当我尝试播放几个视频时(例如,播放(“video_a”);播放(“video_b”);播放(“video_c”);)它只播放第一个视频,然后保持冻结状态。它已经执行了所有代码,但是我使用打印件进行了检查。 – Joan
更正:它同时播放所有视频(不仅仅是第一个)。那么如何在视频结束之前阻止第一个函数调用返回? – Joan
您确定您正在使用Javafx支持的媒体类型,您是否也可以提供更多代码,以便我可以更好地帮助您? –