Итак, я использую JavaFX и хочу провести эксперимент, в котором мне нужно воспроизвести много видео и взаимодействовать с пользователем. Для этой настройки я хотел бы написать функцию, которая получает имя файла и воспроизводит видео с этим именем. Но он должен вернуться только тогда, когда видео закончится, а не раньше. Что-то вроде этого:
private void play(URI name){
MediaPlayer mediaPlayer = new MediaPlayer(new Media(name));
mediaPlayer.setAutoPlay(true);
view.setMediaPlayer(mediaPlayer);
}
Однако эта функция возвращается до того, как видео закончится, что делает выполнение программы полным беспорядком. Я знаю, что в MediaPlayer есть функция setOnEndOfMedia(Runnable), но я не уверен, как я мог бы потенциально использовать это для достижения своей цели.
Это код, который у меня есть на данный момент. Но это не работает. Проблема в том, что оба видео воспроизводятся одновременно, вероятно, потому, что функция воспроизведения возвращается, как только она запустила видео. Я также попытался просто добавить цикл while (true) в конце функции воспроизведения, чтобы он застрял там до возврата; in .setOnEndOfMedia вызывается, что вообще предотвращает воспроизведение любого видео.
КОД:
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);
}