From 5cbde9cc334b1863434d0f710f5bb492dcc088a6 Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Sun, 9 Sep 2018 19:38:14 +0800 Subject: [PATCH] Fix not on FX user thread --- HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java | 9 +++++++++ HMCL/src/main/java/org/jackhuang/hmcl/Main.java | 10 ++-------- .../main/java/org/jackhuang/hmcl/setting/Profile.java | 7 +++---- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index 0d16a2802..cc5dff852 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -21,12 +21,14 @@ import com.jfoenix.concurrency.JFXUtilities; import javafx.application.Application; import javafx.application.Platform; import javafx.stage.Stage; +import org.jackhuang.hmcl.setting.ConfigHolder; import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.upgrade.UpdateChecker; import org.jackhuang.hmcl.util.*; import java.io.File; +import java.io.IOException; import java.lang.management.ManagementFactory; import java.net.URISyntaxException; import java.net.URL; @@ -37,6 +39,7 @@ import java.util.List; import java.util.concurrent.TimeUnit; import static org.jackhuang.hmcl.util.Logging.LOG; +import static org.jackhuang.hmcl.util.i18n.I18n.i18n; public final class Launcher extends Application { @@ -44,6 +47,12 @@ public final class Launcher extends Application { public void start(Stage primaryStage) { Thread.currentThread().setUncaughtExceptionHandler(CRASH_REPORTER); + try { + ConfigHolder.init(); + } catch (IOException e) { + Main.showErrorAndExit(i18n("fatal.config_loading_failure", Paths.get("").toAbsolutePath().normalize())); + } + try { // When launcher visibility is set to "hide and reopen" without Platform.implicitExit = false, // Stage.show() cannot work again because JavaFX Toolkit have already shut down. diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java index 6e274726c..f76d74c01 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java @@ -49,12 +49,6 @@ public final class Main { return; } - try { - ConfigHolder.init(); - } catch (IOException e) { - showErrorAndExit(i18n("fatal.config_loading_failure", Paths.get("").toAbsolutePath().normalize())); - } - Launcher.main(args); } @@ -100,7 +94,7 @@ public final class Main { /** * Indicates that a fatal error has occurred, and that the application cannot start. */ - private static void showErrorAndExit(String message) { + static void showErrorAndExit(String message) { System.err.println(message); System.err.println("A fatal error has occurred, forcibly exiting."); JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE); @@ -110,7 +104,7 @@ public final class Main { /** * Indicates that potential issues have been detected, and that the application may not function properly (but it can still run). */ - private static void showWarningAndContinue(String message) { + static void showWarningAndContinue(String message) { System.err.println(message); System.err.println("Potential issues have been detected."); JOptionPane.showMessageDialog(null, message, "Warning", JOptionPane.WARNING_MESSAGE); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java index 1fbbbfc58..de989f716 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.setting; import com.google.gson.*; +import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.beans.property.*; @@ -28,8 +29,6 @@ import org.jackhuang.hmcl.game.HMCLCacheRepository; import org.jackhuang.hmcl.game.HMCLGameRepository; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.mod.ModManager; -import org.jackhuang.hmcl.task.Schedulers; -import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.WeakListenerHelper; import org.jackhuang.hmcl.util.*; @@ -206,8 +205,8 @@ public final class Profile implements Observable { observableHelper.removeListener(listener); } - protected void invalidate() { - Schedulers.computation().schedule(observableHelper::invalidate); + private void invalidate() { + Platform.runLater(observableHelper::invalidate); } public static final class Serializer implements JsonSerializer, JsonDeserializer {