Iterator<Player> iterator = plugin.inreview.keySet().iterator();
while (iterator.hasNext()) {
Player key = (Player) iterator.next();
chat.getRecipients().remove(key);
}
这引发:
java.util.NoSuchElementException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)
有关为何发生这种情况的任何想法?发生这种情况时,地图中有一个键(带有一个值)。
此外,它曾经工作到最近,我已经在我的Java文件上做了很多工作,我无法找出导致这种情况发生的原因。迭代这个地图时,我不能做任何循环,这会让事情变得复杂!
注意:
Chat.getRecipients()
与plugin.inreview
HashBiMap
请给我任何你可能有的提示和想法。
额外详情:
java.util.NoSuchElementException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)
at com.google.common.collect.AbstractBiMap$EntrySet$1.next(AbstractBiMap.java:314)
at com.google.common.collect.AbstractBiMap$EntrySet$1.next(AbstractBiMap.java:306)
at me.geekplaya.Judge.JudgeQuit.onPlayerQuit(JudgeQuit.java:25)
at org.bukkit.plugin.java.JavaPluginLoader$2.execute(JavaPluginLoader.java:251)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:339)
at net.minecraft.server.ServerConfigurationManager.disconnect(ServerConfigurationManager.java:159)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:650)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:231)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:92)
at net.minecraft.server.NetworkListenThread.a(SourceFile:108)
at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:471)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:374)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:417)
答案 0 :(得分:1)
如果remove
调用正如你所说,不在迭代序列上运行那么必须有另一个线程更新plugin.inreview
。
检查plugin.review
的所有写访问器,并确保在线程正在使用此代码读取时不能进行并发更新。
请注意,这样的错误很长时间都无法显示,然后由于其他影响线程时序的更改而突然变成严重问题。