Как дождаться окончания перехода в javafx 2.1?

Моя сцена состоит только из 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();

Как правильно происходит ожидание? Спасибо

6
задан dadox 25 June 2012 в 10:57
поделиться