gpt4 book ai didi

Java:迭代 BiMap - 给我带来了一些问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:42 26 4
gpt4 key购买 nike

Java 编程

迭代 map 的问题

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 文件上做了很多工作,所以我无法找出导致这种情况发生的原因。迭代此 map 时我无法执行任何 while 循环,这使事情变得非常复杂!

注释:

  • 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)

最佳答案

如果如您所说,remove 调用没有对迭代序列进行操作,那么必须有另一个线程更新 plugin.inreview

检查 plugin.review 的所有写入访问器,并确保在线程使用此代码读取时不可能并发更新。

请注意,此类错误可能会在很长一段时间内无法显现出来,然后由于影响线程计时的其他地方的更改而突然成为一个严重问题。

关于Java:迭代 BiMap - 给我带来了一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7773336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com