Почему пауза в javafx.media сразу не приостанавливает проигрывание?

У меня есть программа аудиоплеер. В ней можно менять текущее время мелодии с помощью ползунка slider. Когда ползунок зажат, то проигрывание ставится на паузу, в противном случае (т.е. когда отпускаешь ползунок) проигрывание возобновляется, громкость ставится на 0 и постепенно увеличивается до 1. Проблема состоит в том, что когда я отпускаю ползунок, происходит резкий щелчок (от которого я и хочу избавиться). Я пробовал ставить задержку, однако это не помогло. Я только изучают javafx и скорее всего чего то не понимаю в его особенностях. Буду благодарен за понятный ответ

slider.valueProperty().addListener(new ChangeListener<Number>() {
    public void changed(ObservableValue<? extends Number> changed, Number oldValue, Number newValue) {
       if(slider.isPressed()) { 
           mediaPlayer.pause(); // изменить время и поставить на паузу
           mediaPlayer.setStartTime(Duration.seconds(newValue.intValue()));
       }
    }
});

slider.setOnMouseClicked(new EventHandler<Event>() {
    public void handle(Event event) { // возобновить проигрывание
        mediaPlayer.setVolume(0);
        mediaPlayer.play();
    }
});

    protected void smoothPlay(int Sleep) throws InterruptedException { // плавно увеличить громкость после play()
        Thread.sleep(Sleep);
        mediaPlayer.setVolume(mediaPlayer.getVolume() + 0.0150);
    }

Ответы (2 шт):

Автор решения: Ruslan P.

Необходимо, чтобы цикл с постепенным изменением значения volume и с Thread.sleep(...) исполнялся в другом потоке, при этом важно учитывать, что изменять значение volume допускается только в FXApplicationThread.

Проще будет использовать возможности из javafx.animation (что немного неинтуитивно) )


        final Animation smoothPlay = new Transition() {
            {
                setCycleDuration(Duration.millis(2000));
            }

            @Override
            protected void interpolate(double frac) {
                mediaPlayer.setVolume(frac); // здесь может будет нужен какой-то коэффициент
            }
        };
        mediaPlayer.setVolume(0);
        smoothPlay.play();
        mediaPlayer.play();

→ Ссылка
Автор решения: palma

Решил проблему, включив плавное затухание перед паузой. Это скорее всего связано с тем, что пауза в javafx media, включается перед setVolume. Авось кому понадобится

→ Ссылка