plugins - 来自带有列表的 hasmap 的 ConcurrentModificationException
问题描述
好吧,我正在尝试解决这个问题。我有一个
ConcurrentHashMap< UUID, Object > 市场 = new ConcurrentHashMap();
对象包含:库存库存;这是另一个对象。
所以我试图删除该库存拥有的观众列表。
这是我尝试过的:
for(Iterator<HumanEntity> iter = markets.get(p.getUniqueId()).getInv().getViewers().iterator(); iter.hasNext(); ) {
HumanEntity student1 = iter.next();
Player student = (Player) student1;
if(student.getOpenInventory() != null) {
student.closeInventory();
student.sendMessage(Configuration.Msg_Shop_Closed() );
}
}
getViewers() 返回查看者列表:https ://imgur.com/pi1ecD1
这是我得到的错误
org.bukkit.event.EventException
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.EntityLiving.mount(EntityLiving.java:1717) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.EntityPlayer.mount(EntityPlayer.java:595) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.EntityHuman.ak(EntityHuman.java:347) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.World.entityJoinedWorld(World.java:1605) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.World.g(World.java:1582) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.World.entityJoinedWorld(World.java:1652) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.World.g(World.java:1582) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.World.tickEntities(World.java:1425) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.WorldServer.tickEntities(WorldServer.java:597) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:786) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.8.8.jar:git-Spigot-db6de12-18fbb24]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]
Caused by: java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source) ~[?:1.8.0_191]
at java.util.ArrayList$Itr.next(Unknown Source) ~[?:1.8.0_191]
解决方案
没关系,我解决了,对于以后需要这个的你们,答案是这样的:
Iterator<Seller> it = markets.values().iterator();
while(it.hasNext()){
List<HumanEntity> buyer = it.next().getInv().getViewers();
Iterator<HumanEntity> it2 = buyer.iterator();
HumanEntity buyer1 = it2.next();
if( buyer1.getOpenInventory() != null) {
buyer1.closeInventory();
}
}
推荐阅读
- php - 使用 PHP 进行简单的编码/解码,以避免传递容易猜到的 id
- javascript - 带有 JSON 的模式内的 Bootstrap 4 验证
- python - Udacity CS101:不确定这个嵌套字典问题是错误还是我遗漏了什么
- date - 减去 3 个月到 yyyymm 月份格式列 hive sql
- bash - 尝试根据 CWD 更改 bash 提示的颜色。更改目录后无法更新
- r - 基于 2 个条件的行值的条件减法
- python - 如何定期重复一个函数,直到在 Django 的后台成功?
- git - git pull 对文件名太长不起作用
- docker - 使用远程 docker 容器中的 vs 代码调试 webpack 开发服务器
- java - 通过 Java JDBC 从 Azure VM 连接 Azure SQL 数据库问题