@devpy14

Почему метод getDuration() на объекте Media возвращает UNKNOWN?

Пишу mp3 плеер. Есть метод "beginTimer()", который во время проигрывания песни считает время и в соответствии с ним двигает ползунок слайдера:
private void beginTimer() {
        timer = new Timer();

        double max = media.getDuration().toSeconds();
        songDuration.setMax(max);

        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                double current = mediaPlayer.getCurrentTime().toSeconds();
                double end = media.getDuration().toSeconds();

                running = true;
                songDuration.setValue((int) current);

                if (current / end == 1) {
                    cancelTimer();
                    Platform.runLater(() -> nextMedia());
                }
            }
        };
        timer.scheduleAtFixedRate(timerTask, 0, 1000);
    }


При проигрывании первой песни всё отрабатывает корректно, переменная "max" возвращает продолжительность песни в секундах. Но при повторном вызове метода, метод getDuration() возвращает NaN, и так с каждой последующей песней. При том, если перенести строчки
double max = media.getDuration().toSeconds();
songDuration.setMax(max);

в run метод, то сначала возвращается также NaN, а вот потом возвращается уже нормальное числовое значение.

Пробовал сделать следующим образом:
mediaPlayer.setOnReady(() -> {
     double max = media.getDuration().toSeconds();
     songDuration.setMax(max);
});

Результат таков, что при проигрывании песни в первый раз эта строчка просто не срабатывает, но при последующих сменах песен работает нормально

Из-за чего это происходит?
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы