我试图检查服务器的实体并每秒迭代它们,如果我找到一个不再生成的实体,它将自动重新生成。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。 –