我試圖檢查服務器的實體並每秒迭代它們,如果我找到一個不再生成的實體,它將自動重新生成。HashMap併發修改
問題發生在我的EntitySpawnEvent
中,我從hashmap中刪除舊實體並添加一個新實體,這會創建一個java.util.ConcurrentModificationException
。有沒有可能我至少壓制這個錯誤? (因爲我正在移除一個已經通過「檢查」的實體。)
new BukkitRunnable() {
public void run() {
for(Entity e : CheckAliveEntities.keySet()) {
if(!(e.isValid())) {
if(!(e instanceof Player)) {
System.out.println("DA");
x.removeHologram(e);
y.setEntityRespawn(e);
break;
}
}
}
}
}.runTaskTimer(this, 5, 5);
如果是多線程環境,則可以使用ConcurrentHashMap。如果單線程環境,你可以參考這篇文章http://stackoverflow.com/questions/2826380/concurrentmodificationexception-hashmap-in-java。 –
add try {} catch {} block for for循環以上如果條件。有空的catch塊來忽略異常。如果你想移動到其他集合框架,使用ConcurrentHashMap –
謝謝你們,因爲ConcurrentHashMap ideea,甚至不知道這些存在。你的答案是贏家xD。 –