#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); }