У меня проблемы с моим приложением JavaFX. В настоящее время я создаю музыкальный плеер, и у меня есть слайдер внизу (аналогично Spotify), который должен двигаться в зависимости от продолжительности песни.FIXED - приложение приложения JavaFX при использовании Thread
Проблема в том, что мой код не работает при использовании этого кода Thread. Он получает текущую продолжительность песни, а затем устанавливает значение durationSlider перед сном на 1000 мс.
Кто-нибудь знает, как устранить эту проблему с задержкой? Код по-прежнему работает каждую секунду, но мой графический интерфейс отстает, и я совершенно ничего не могу сделать.
public void startCounting(){
mediaPlayer.setOnPlaying(new Thread() {
@Override
public void run() {
Duration a;
while (mediaPlayer.getStatus().equals(MediaPlayer.Status.PLAYING)) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Shit aint workin bro");
}
a = mediaPlayer.getCurrentTime();
int currentTime = (int) a.toSeconds();
System.out.println(currentTime);
durationSlider.setValue(50.0); //Testing the setValue() method
}
}
});
}
Редактировать: проблема устранена.
Хорошо, я не могу проверить ваш код прямо сейчас, но в качестве предложения вам не следует обновлять пользовательский интерфейс из «Runnable», также неудобно, как ваш код не выдавал исключение. То, как вы подключили прослушиватель событий, является правильным, но вы должны изменить метод 'durationSlider.setValue (50.0);' для вызова из потока 'Platform.RunLater()' для обновления пользовательского интерфейса. Посмотрите аналогичное решение здесь http://stackoverflow.com/questions/13784333/platform-runlater-and-task-in-javafx – AntJavaDev