Как переключить сцену в JavaFX без кнопки с конца временной шкалы (таймер обратного отсчета)

#java

Вопрос:

Новичок Java здесь создает приложение для викторины. У меня нет проблем с переключением между сценами с помощью кнопки, но я пытаюсь переключаться между сценами в конце таймера, который управляется временной шкалой. Таким образом, событие немного отличается. У меня возникли некоторые проблемы, и я продолжаю получать сообщение об ошибке. Таймер запускается с помощью метода «runTimer», и метод «startQuiz» теоретически должен переключать сцены.

Любая помощь была бы абсолютным спасением!

Код, опубликованный здесь, исключает импорт (но я включил все, что предложил IDE).

 public class countDownScreenController implements Initializable { private Stage stage; private Scene scene; private Parent root; private StringProperty timerText; private int timerTotal; private Timeline timeLine;  @Override public void initialize(URL url, ResourceBundle resourceBundle) {  runTimer(); }  public void runTimer(){  timerTotal = 3;  setTimerText(timerTotal);  timeLine = new Timeline();  timeLine.setCycleCount(timerTotal);  timeLine.getKeyFrames().add(new KeyFrame(Duration.seconds(1), e -gt; {  timerTotal--;  setTimerText(timerTotal);  }));  timeLine.play();  timeLine.setOnFinished(e -gt; {  startQuiz();  }); } public void startQuiz (ActionEvent event) throws IOException {  Parent root = FXMLLoader.load(getClass().getResource("/fxml/quizScreenScreen.fxml"));  stage = (Stage) ((Node)event.getSource()).getScene().getWindow();  stage.setScene(scene);  stage.show(); }  public countDownScreenController() {  timerText = new SimpleStringProperty(); }  public String getTimerText() {  return timerText.get(); }  public StringProperty timerTextProperty() {  return timerText; }  public void setTimerText(String timerText) {  this.timerText.set(timerText); }  public void setTimerText(int remainingSeconds) {  int minutes = remainingSeconds / 60;  int seconds = remainingSeconds % 60;  setTimerText(String.format("d:d", minutes, seconds)); }  

}

Комментарии:

1. Где ваша scene инициализация?

Ответ №1:

В конце концов мне стало проще привязать событие switch scene к метке, содержащей таймер/часы обратного отсчета, а затем я мог переключать сцены известным мне способом, используя:

 timeLine.setOnFinished(e -gt; {  try {  startQuiz();  } catch (IOException ioException) {  ioException.printStackTrace();  }  }); }  public void startQuiz() throws IOException {  FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/quizScreen.fxml"));  Parent root = loader.load();  countDownClock.getScene().setRoot(root); }