From 139e2ee78decb586ed82da9237895b21f5fdcfba Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Sun, 25 Feb 2018 10:48:07 +0800 Subject: [PATCH] try fix ConcurrentModificationException --- HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java | 3 +-- .../org/jackhuang/hmcl/game/DefaultGameRepository.java | 10 +++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java index ab8ac08c1..4e7311f8b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java @@ -193,8 +193,7 @@ public final class MainPage extends StackPane implements DecoratorPage { private void loadVersions(Profile profile) { this.profile = profile; List children = new LinkedList<>(); - List versions = new LinkedList<>(profile.getRepository().getVersions()); - for (Version version : versions) { + for (Version version : profile.getRepository().getVersions()) { children.add(buildNode(profile, version.getId(), GameVersion.minecraftVersion(profile.getRepository().getVersionJar(version.getId())).orElse("Unknown"))); } FXUtils.resetChildren(masonryPane, children); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java index 54f4377dd..b261fdf9e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java @@ -38,7 +38,7 @@ import java.util.logging.Level; public class DefaultGameRepository implements GameRepository { private File baseDirectory; - protected final Map versions = new TreeMap<>(); + protected Map versions; protected boolean loaded = false; public DefaultGameRepository(File baseDirectory) { @@ -151,7 +151,7 @@ public class DefaultGameRepository implements GameRepository { } protected void refreshVersionsImpl() { - versions.clear(); + Map versions = new TreeMap<>(); if (ClassicVersion.hasClassicVersion(getBaseDirectory())) { Version version = new ClassicVersion(); @@ -172,7 +172,10 @@ public class DefaultGameRepository implements GameRepository { if (!json.exists()) { List jsons = FileUtils.listFilesByExtension(dir, "json"); if (jsons.size() == 1) - jsons.get(0).renameTo(json); + if (!jsons.get(0).renameTo(json)) { + Logging.LOG.warning("Cannot rename json file " + jsons.get(0) + " to " + json + ", ignoring version " + id); + continue; + } } Version version; @@ -216,6 +219,7 @@ public class DefaultGameRepository implements GameRepository { } } + this.versions = versions; loaded = true; }