Моя сцена состоит только из 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<ActionEvent>() {
@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();
Как правильно выполняется ожидание? Спасибо