diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index 568bb4e09..8762f610d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -106,7 +106,6 @@ public final class Launcher extends Application { Schedulers.shutdown(); Controllers.shutdown(); Platform.exit(); - Lang.executeDelayed(OperatingSystem::forceGC, TimeUnit.SECONDS, 5, true); }); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java index b1bd28c76..d8397207b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java @@ -73,11 +73,15 @@ public final class Schedulers { public static synchronized void shutdown() { Logging.LOG.info("Shutting down executor services."); + // shutdownNow will interrupt all threads. + // So when we want to close the app, no threads need to be waited for finish. + // Sometimes it resolves the problem that the app does not exit. + if (CACHED_EXECUTOR != null) - CACHED_EXECUTOR.shutdown(); + CACHED_EXECUTOR.shutdownNow(); if (IO_EXECUTOR != null) - IO_EXECUTOR.shutdown(); + IO_EXECUTOR.shutdownNow(); } public static Future schedule(Executor executor, Runnable command) {