diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index e51a6e1dc..9cd32c1eb 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -507,12 +507,14 @@ public final class LauncherHelper { }); break; case HIDE: + launchingLatch.countDown(); Platform.runLater(() -> { // If application was stopped and execution services did not finish termination, // these codes will be executed. if (Controllers.getStage() != null) { Controllers.getStage().close(); - launchingLatch.countDown(); + Controllers.shutdown(); + Schedulers.shutdown(); } }); break; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/CancellableTaskExecutor.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/CancellableTaskExecutor.java index d64c89362..c505a1ff9 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/CancellableTaskExecutor.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/CancellableTaskExecutor.java @@ -288,12 +288,14 @@ public class CancellableTaskExecutor extends TaskExecutor { @Override public void run() { + String oldName = Thread.currentThread().getName(); try { if (task.getName() != null) Thread.currentThread().setName(task.getName()); if (!executeTask(parentTask, task)) success.set(false); } finally { + Thread.currentThread().setName(oldName); latch.countDown(); } } 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 4975b54c3..b1bd28c76 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java @@ -74,10 +74,10 @@ public final class Schedulers { Logging.LOG.info("Shutting down executor services."); if (CACHED_EXECUTOR != null) - CACHED_EXECUTOR.shutdownNow(); + CACHED_EXECUTOR.shutdown(); if (IO_EXECUTOR != null) - IO_EXECUTOR.shutdownNow(); + IO_EXECUTOR.shutdown(); } public static Future schedule(Executor executor, Runnable command) {