diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerExecutorService.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerExecutorService.java index 047be1069..fb6ab5351 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerExecutorService.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerExecutorService.java @@ -36,7 +36,10 @@ class SchedulerExecutorService extends Scheduler { @Override public Future schedule(ExceptionalRunnable block) { - return executorService.submit(block.toCallable()); + if (executorService.isShutdown() || executorService.isTerminated()) + return Schedulers.NONE.schedule(block); + else + return executorService.submit(block.toCallable()); } } 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 793ed8575..7ba61c2b9 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java @@ -17,6 +17,8 @@ */ package org.jackhuang.hmcl.task; +import org.jackhuang.hmcl.util.Constants; + import java.util.concurrent.*; /** @@ -112,6 +114,8 @@ public final class Schedulers { return newThread(); } + static final Scheduler NONE = new SchedulerImpl(Constants.emptyConsumer()); + public static synchronized void shutdown() { if (CACHED_EXECUTOR != null) CACHED_EXECUTOR.shutdown();