Пишу 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);
});
Результат таков, что при проигрывании песни в первый раз эта строчка просто не срабатывает, но при последующих сменах песен работает нормально
Из-за чего это происходит?