From 529c4ed420a65b1a2077f26222074a5d3d9e80b5 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Thu, 10 Oct 2019 16:03:25 +0800 Subject: [PATCH] Fix: ConcurrentModificationException --- .../optifine/OptiFineBMCLVersionList.java | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java index 2843a5ded..03cc73d6a 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java @@ -56,23 +56,29 @@ public final class OptiFineBMCLVersionList extends VersionList duplicates = new HashSet<>(); - List root = JsonUtils.GSON.fromJson(task.getResult(), new TypeToken>() { - }.getType()); - for (OptiFineVersion element : root) { - String version = element.getType() + "_" + element.getPatch(); - String mirror = "http://bmclapi2.bangbang93.com/optifine/" + element.getGameVersion() + "/" + element.getType() + "/" + element.getPatch(); - if (!duplicates.add(mirror)) - continue; + lock.writeLock().lock(); - boolean isPre = element.getPatch() != null && (element.getPatch().startsWith("pre") || element.getPatch().startsWith("alpha")); + try { + versions.clear(); + Set duplicates = new HashSet<>(); + List root = JsonUtils.GSON.fromJson(task.getResult(), new TypeToken>() { + }.getType()); + for (OptiFineVersion element : root) { + String version = element.getType() + "_" + element.getPatch(); + String mirror = "http://bmclapi2.bangbang93.com/optifine/" + element.getGameVersion() + "/" + element.getType() + "/" + element.getPatch(); + if (!duplicates.add(mirror)) + continue; - if (StringUtils.isBlank(element.getGameVersion())) - continue; + boolean isPre = element.getPatch() != null && (element.getPatch().startsWith("pre") || element.getPatch().startsWith("alpha")); - String gameVersion = VersionNumber.normalize(element.getGameVersion()); - versions.put(gameVersion, new OptiFineRemoteVersion(gameVersion, version, mirror, isPre)); + if (StringUtils.isBlank(element.getGameVersion())) + continue; + + String gameVersion = VersionNumber.normalize(element.getGameVersion()); + versions.put(gameVersion, new OptiFineRemoteVersion(gameVersion, version, mirror, isPre)); + } + } finally { + lock.writeLock().unlock(); } } };