Я новичок в 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);
}
Как я могу сделать эту задержку?
Код в обработчике onFinished выполняется после паузы (когда пауза заканчивается), так что у вас есть это в обратном порядке.
Большое спасибо, теперь я понял, как работает пауза, это решает мою проблему!




О вашем первом вопросе: попробуйте использовать 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(), оно ждет правильно, но также не меняет текст метки.
Вы никогда не должны вызывать Thread#sleep(...) в потоке приложения JavaFX. Этот тред должен всегда отвечать на запросы (@EgeBULUT)
@Slaw, о, я понял, спасибо. Я буду использовать PauseTransition с этого момента
Вы использовали 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();
}
О, теперь я понял. Большое спасибо, что решили мою проблему!
Да, спасибо, это решает ошибку. но он не ждет, когда я нажму кнопку, он все еще сразу же переходит на другую сцену