Как ждать завершения JavaFx MediaPlayer - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть MediaPlayer объект, который воспроизводит видео.Когда воспроизведение видео закончится, я хочу, чтобы программа скрывала MediaView и отображала различные объекты JavaFx.Однако когда я вызываю player.play(), программа немедленно интерпретирует строки кода, которые следуют, в результате чего MediaView вообще не отображается.

public class Level1Controller implements Initializable {

    File file = new File("ngnl.mp4");
    Media media = new Media(file.toURI().toString());
    MediaPlayer player = new MediaPlayer(media);
    @FXML
    MediaView view = new MediaView();


    /**
     * Initializes the controller class.
     */

    @Override
    public void initialize(URL url, ResourceBundle rb) {

        view.setMediaPlayer(player);
        player.play();

        view.setVisible(false); 
    }
}

Дополнительные кнопки и тому подобное будут "под" MediaView в иерархии JavaFx, поэтому, когда она скрыта, будут видны основные элементы.

1 Ответ

0 голосов
/ 17 декабря 2018

Не могу найти никаких официальных документов, в которых упоминается об этом, но я уверен, что медиа-файл воспроизводится JavaFX в отдельном потоке, поэтому он не блокирует поток пользовательского интерфейса.Вот почему вам нужно использовать MediaPlayer.setOnEndOfMedia :

view.setMediaPlayer(player);

player.setOnEndOfMedia(() -> {
    view.setVisible(false); 
});    

player.play();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...