Заставить слушателя ждать javafx - PullRequest
0 голосов
/ 18 мая 2018

Я проверил некоторые вопросы здесь, но не смог найти правильный ответ. Возможно, я использую неправильные ключевые слова для поиска. Но то, что я нашел, не помогло. Вот мой вопрос. У меня есть несколько кругов и линий, которые скользят определенным образом. Я хочу обновить балансную переменную после выполнения анимации.

DoubleProperty balance = new SimpleDoubleProperty();

И я обновляю баланс следующим образом:

if (shapeADone == false) {
    intersecting = arc.centerXProperty().lessThan(boldLine.getEndX() - 13);
    intersecting.addListener((obs, wasIntersecting, isNowIntersecting) -> {
        System.out.println("Collision!");
        animation1.stop();
        animation2.stop();
        animation3.stop();
    });
    again = true;
    balance.setValue(-1);
} else {
    fadeB();
    balance.setValue(1);
}

Но в основном методе я хочу сделать что-то вроде этого

level1.balance.addListener(ov -> {
           System.out.println("The new value is " +
                   level1.balance.doubleValue());
           if (level1.balance.getValue()==1) {
              //delay setting scene
               primaryStage.setScene(scene2);
           }
       });

У меня есть анимация перед настройкой scene2, но, поскольку баланс мгновенно обновляется, моя анимация не может быть выполнена. Я хочу знать, есть ли способ отложить баланс прослушивания или установить сцену. Я пробовал Thread.sleep и balance.wait, но он выдает ошибки во время выполнения.

Редактировать: Этот вопрос ясно показывает, что у меня не было знаний о javafx. То, что я хочу сделать, просто, а решение еще проще. Когда анимация выполняется до конца, я обновляю значение баланса. Все, что я хотел, это убедиться, что анимация показана до конца.

1 Ответ

0 голосов
/ 18 мая 2018

Вот ответ:

else{
                animation3.setOnFinished(event -> balance.setValue(1));
                fadeB();
            }

Как комментарий Седрика, я изменяю код следующим образом. Добавление setOnFinish к анимациям, которые должны быть выполнены, решает проблему. Это работает.

...