diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java index 1b66d1f4c..87d2111ed 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java @@ -152,8 +152,9 @@ public class AddAccountPane extends StackPane { Accounts.getAccounts().add(account); } else { // adding an already-added account - // instead of discarding the new account, we replace the existing account with the new account - Accounts.getAccounts().set(oldIndex, account); + // instead of discarding the new account, we first remove the existing one then add the new one + Accounts.getAccounts().remove(oldIndex); + Accounts.getAccounts().add(oldIndex, account); } acceptPane.hideSpinner(); fireEvent(new DialogCloseEvent()); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java index da7684e5b..21ab225eb 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java @@ -22,7 +22,7 @@ import static javafx.collections.FXCollections.unmodifiableObservableList; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; +import java.util.IdentityHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -75,7 +75,7 @@ public final class MappedObservableList { @Override public void onChanged(Change change) { // cache removed elements to reduce calls to mapper - Map> cache = new HashMap<>(); + Map> cache = new IdentityHashMap<>(); while (change.next()) { int from = change.getFrom();