簡體   English   中英

Java:迭代BiMap-使我遇到一些問題

[英]Java: Iterating a BiMap - Causing Me Some Issues

Java程序設計

迭代地圖的問題

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文件上做了很多工作,以至於我無法找出導致這種情況的原因。 迭代此地圖時,我無法進行任何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所有寫訪問器,並確保在線程使用此代碼讀取時無法進行任何並發更新。

請注意,這樣的錯誤可能長時間不會出現,然后由於其他影響線程時間的更改而突然變成嚴重的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM