diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/Navigator.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/Navigator.java index e4ee5657b..9e7ee6dc0 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/Navigator.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/Navigator.java @@ -17,9 +17,7 @@ */ package org.jackhuang.hmcl.ui.construct; -import javafx.application.Platform; import javafx.beans.property.ObjectProperty; -import javafx.beans.property.ReadOnlyBooleanWrapper; import javafx.beans.property.SimpleObjectProperty; import javafx.event.Event; import javafx.event.EventHandler; @@ -40,19 +38,23 @@ public class Navigator extends StackPane { private final Stack stack = new Stack<>(); private final TransitionHandler animationHandler = new TransitionHandler(this); - private final ReadOnlyBooleanWrapper canGoBack = new ReadOnlyBooleanWrapper(); + private boolean initialized = false; - public Navigator(Node init) { + public void init(Node init) { stack.push(init); getChildren().setAll(init); - Platform.runLater(() -> - fireEvent(new NavigationEvent(this, init, NavigationEvent.NAVIGATED))); + fireEvent(new NavigationEvent(this, init, NavigationEvent.NAVIGATED)); + + initialized = true; } public void navigate(Node node) { FXUtils.checkFxUserThread(); + if (!initialized) + throw new IllegalStateException("Navigator must have a root page"); + Node from = stack.peek(); if (from == node) return; @@ -89,6 +91,9 @@ public class Navigator extends StackPane { public void close(Node from) { FXUtils.checkFxUserThread(); + if (!initialized) + throw new IllegalStateException("Navigator must have a root page"); + Logging.LOG.info("Closed page " + from); if (stack.peek() != from) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorController.java index ce032de89..b4ae5c6e8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorController.java @@ -84,9 +84,10 @@ public class DecoratorController { decorator.titleProperty().set(Metadata.TITLE); decorator.setOnCloseButtonAction(Launcher::stopApplication); - navigator = new Navigator(mainPage); + navigator = new Navigator(); navigator.setOnNavigating(this::onNavigating); navigator.setOnNavigated(this::onNavigated); + navigator.init(mainPage); decorator.getContent().setAll(navigator); decorator.onCloseNavButtonActionProperty().set(e -> close());