diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index a3d064976..058b33b4a 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -86,6 +86,8 @@ public final class Launcher extends Application { } public static void stopWithoutPlatform() { + Logging.LOG.info("Stopping application without JavaFX Toolkit"); + JFXUtilities.runInFX(() -> { if (Controllers.getStage() == null) return; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java index d8eaa1b1b..610753499 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java @@ -93,6 +93,8 @@ public final class Controllers { public static void initialize(Stage stage) { Controllers.stage = stage; + stage.setOnCloseRequest(e -> Launcher.stopApplication()); + decorator = new Decorator(stage, getMainPage(), Launcher.TITLE, false, true); decorator.showPage(null); leftPaneController = new LeftPaneController(decorator.getLeftPane()); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java index ae221046a..253cfa765 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java @@ -74,7 +74,7 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza private static final SVGGlyph close = Lang.apply(new SVGGlyph(0, "CLOSE", "M810 274l-238 238 238 238-60 60-238-238-238 238-60-60 238-238-238-238 60-60 238 238 238-238z", Color.WHITE), glyph -> { glyph.setPrefSize(12, 12); glyph.setSize(12, 12); }); - private final ObjectProperty onCloseButtonAction = new SimpleObjectProperty<>(Launcher::stopApplication); + private final ObjectProperty onCloseButtonAction; private final BooleanProperty customMaximize = new SimpleBooleanProperty(false); private final Stage primaryStage; @@ -141,6 +141,8 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza FXUtils.loadFXML(this, "/assets/fxml/decorator.fxml"); + onCloseButtonAction = new SimpleObjectProperty<>(this, "onCloseButtonAction", primaryStage::close); + primaryStage.initStyle(StageStyle.UNDECORATED); btnClose.setGraphic(close); btnMin.setGraphic(minus); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java index 6072fd5c2..c61c17af2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java @@ -45,6 +45,7 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler { put("java.lang.ClassFormatError", Launcher.i18n("crash.NoClassDefFound")); put("java.lang.OutOfMemoryError", "FUCKING MEMORY LIMIT!"); put("Trampoline", Launcher.i18n("launcher.update_java")); + put("com.sun.javafx.css.StyleManager.findMatchingStyles", Launcher.i18n("launcher.update_java")); put("NoSuchAlgorithmException", "Has your operating system been installed completely or is a ghost system?"); } };