Моя сцена состоит только из ImageView , отображающего изображение. Я хотел бы сделать изображение черным (, назначенным цветом сцены ), а затем через некоторое время снова перейти от черного к изображению. Я нашел FadeTransition очень подходящим для этой цели. Это часть моего кода:
// fade to black transition
FadeTransition ft1 = new FadeTransition(Duration.millis(2000), myImageView);
ft1.setFromValue(1.0);
ft1.setToValue(0.0);
ft1.play();
// fade from black transition
FadeTransition ft2 = new FadeTransition(Duration.millis(2000), myImageView);
ft2.setFromValue(0.0);
ft2.setToValue(1.0);
ft2.play();
Моя проблема в том, что ft1.play()
является асинхронным, поэтому приведенный ниже код начнет выполняться до выхода из ft1.play()
. В результате я вижу только второй переход. Как я могу дождаться окончания первого перехода, а затем запустить второй переход? Я не могу перевести поток в спящий режим, потому что это основной поток javafx (пытался и не работал ).
Я попытался использовать метод onFinishedProperty ()с комбинацией занятости -, ожидающей флага, но навсегда застрял в цикле while. Вот мой код для этого:
boolean isTransitionPlaying;
FadeTransition ft = new FadeTransition(Duration.millis(2000), iv);
ft.setFromValue(1.0);
ft.setToValue(0.0);
ft.onFinishedProperty().set(new EventHandler() {
@Override
public void handle(ActionEvent actionEvent) {
transitionPlaying = false;
}
});
transitionPlaying = true;
ft.play();
while (transitionPlaying == true)
{
// busy wait
System.out.println("still waiting...");
}
FadeTransition ft2 = new FadeTransition(Duration.millis(2000), iv);
ft2.setFromValue(0.0);
ft2.setToValue(1.0);
ft2.play();
Как правильно происходит ожидание? Спасибо