Я делаю слайдер, который перемещается при воспроизведении песни, используя класс MediaPlayer из JavaFX. Это работает совершенно нормально, и слайдер движется вместе с песней. Если слайдер перетаскивается, он меняет местоположение песни (используя метод .seek ()). Единственная проблема возникает, когда я нажимаю ползунок. Песня не двигается, и я думаю, что это потому, что слушатель, смотрящий на позицию песни, все еще движется, и это перемещает ползунок в его следующую позицию. Я думаю, что это блокирует клик пользователя, но я не уверен, как это исправить. Будет ли это означать приостановку слушателя или что-то, в чем я не уверен?
protected void updateValues() {
if (playTime != null && progressBar != null && volume != null) {
Platform.runLater(new Runnable() {
public void run() {
Duration currentTime = player.getCurrentTime();
duration = player.getMedia().getDuration();
playTime.setText(formatTime(currentTime, duration));
progressBar.setDisable(duration.isUnknown());
if (!progressBar.isDisabled()
&& duration.greaterThan(Duration.ZERO)
&& !progressBar.isValueChanging()) {
progressBar.setValue(currentTime.divide(duration).toMillis()
* 100.0);
}
}
});
}
}
progressBar.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
player.seek(duration.multiply(progressBar.getValue()/100.0));
}
});
Если это полезно, я следую этому: https://docs.oracle.com/javafx/2/media/playercontrol.htm