JavaFX Thread.Sleep() или pause() в ActionEvent

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

Я пробовал с Thread.sleep() следующим образом: (он ждет правильно, но почему-то не меняет текст метки)

    @FXML
public void pressButton(ActionEvent event) throws IOException, InterruptedException {
    user = new User(inUsername.getText(),inPassword.getText());
    lLeftBottom.setText(user.getUserInfo());
    Thread.sleep(2000);
    changeScene2(event);
}

(редактировать, спасибо Slaw за решение проблемы actionEvent с pause())

а также я пытаюсь использовать метод паузы JavaFX, но он не ждет, все равно сразу же перескакивает на другую сцену

    @FXML
public void pressButton(ActionEvent event) throws IOException, InterruptedException {
    user = new User(inUsername.getText(),inPassword.getText());
    PauseTransition pause = new PauseTransition(Duration.seconds(3));
    pause.setOnFinished(e ->{
        lLeftBottom.setText(user.getUserInfo());
    });
    pause.play();
    changeScene2(event);
}

Как я могу сделать эту задержку?

Да, спасибо, это решает ошибку. но он не ждет, когда я нажму кнопку, он все еще сразу же переходит на другую сцену

Ege BULUT 24.12.2020 14:08

Код в обработчике onFinished выполняется после паузы (когда пауза заканчивается), так что у вас есть это в обратном порядке.

James_D 24.12.2020 14:26

Большое спасибо, теперь я понял, как работает пауза, это решает мою проблему!

Ege BULUT 24.12.2020 20:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
514
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

О вашем первом вопросе: попробуйте использовать try catch. Сработало для меня.

public static void main(String[] args) {
    System.out.println("test1");
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("test2");
}

Спасибо, ждет да, но почему-то не устанавливает текст метки. Пока я использую исключение throw для sleep(), оно ждет правильно, но также не меняет текст метки.

Ege BULUT 24.12.2020 14:17

Вы никогда не должны вызывать Thread#sleep(...) в потоке приложения JavaFX. Этот тред должен всегда отвечать на запросы (@EgeBULUT)

Slaw 24.12.2020 21:24

@Slaw, о, я понял, спасибо. Я буду использовать PauseTransition с этого момента

Ege BULUT 10.01.2021 19:46
Ответ принят как подходящий

Вы использовали PauseTransition наоборот. Если вы хотите изменить сцену после паузы, это часть, которая должна быть в вашем обработчике события onFinished:

@FXML
public void pressButton(ActionEvent event) throws IOException, InterruptedException {
    user = new User(inUsername.getText(),inPassword.getText());
    PauseTransition pause = new PauseTransition(Duration.seconds(3));
    pause.setOnFinished(e ->{
        changeScene2(event);
    });
    lLeftBottom.setText(user.getUserInfo());
    pause.play();
}

О, теперь я понял. Большое спасибо, что решили мою проблему!

Ege BULUT 24.12.2020 20:16

Другие вопросы по теме