From 8bc5d2112f0bf1735c0e3bbf635833fec938c2be Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Mon, 21 Dec 2020 01:56:46 +0800 Subject: [PATCH] fix: #801 --- .../main/java/org/jackhuang/hmcl/game/GameVersion.java | 10 ++++++---- .../main/java/org/jackhuang/hmcl/task/FetchTask.java | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java index f9dedf716..7e9eddf21 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java @@ -17,8 +17,6 @@ */ package org.jackhuang.hmcl.game; -import static org.jackhuang.hmcl.util.Logging.LOG; - import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.util.gson.JsonUtils; @@ -35,19 +33,23 @@ import java.nio.file.FileSystem; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.logging.Level; import java.util.stream.Collectors; import java.util.stream.StreamSupport; +import static org.jackhuang.hmcl.util.Lang.tryCast; +import static org.jackhuang.hmcl.util.Logging.LOG; + /** * @author huangyuhui */ public final class GameVersion { private static Optional getVersionFromJson(Path versionJson) { try { - MinecraftVersion version = JsonUtils.fromNonNullJson(FileUtils.readText(versionJson), MinecraftVersion.class); - return Optional.ofNullable(version.name); + Map version = JsonUtils.fromNonNullJson(FileUtils.readText(versionJson), Map.class); + return tryCast(version.get("name"), String.class); } catch (IOException | JsonParseException e) { LOG.log(Level.WARNING, "Failed to parse version.json", e); return Optional.empty(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java index c8b459ecb..ab82f9ca5 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java @@ -278,13 +278,15 @@ public abstract class FetchTask extends Task { if (DOWNLOAD_EXECUTOR == null) { synchronized (Schedulers.class) { if (DOWNLOAD_EXECUTOR == null) { - DOWNLOAD_EXECUTOR = new ThreadPoolExecutor(0, downloadExecutorConcurrency, 10, TimeUnit.SECONDS, - new LinkedBlockingQueue<>(), + ThreadPoolExecutor executor = new ThreadPoolExecutor(downloadExecutorConcurrency, downloadExecutorConcurrency, 10, TimeUnit.SECONDS, + new ArrayBlockingQueue<>(downloadExecutorConcurrency), runnable -> { Thread thread = Executors.defaultThreadFactory().newThread(runnable); thread.setDaemon(true); return thread; }); + executor.allowCoreThreadTimeOut(true); + DOWNLOAD_EXECUTOR = executor; } } }