Solved ConcurrentModificationException

Discussion in 'Plugin Development' started by Hex_27, Apr 24, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    Hex_27

    Code:
        public void allyKingdom(String kingdom, String ally){
           //kingdoms is a config file
            List<String> mods = kingdoms.getStringList(kingdom + ".allies");
    
            List<String> enemies = kingdoms.getStringList(kingdom + ".enemies");
            List<String> allies = kingdoms.getStringList(kingdom + ".allies");
        if(enemies.contains(ally)){   
           
            for(String s: enemies){
                if(s.equals(ally)){
                    enemies.remove(s);
                }
            }
           
        }
       
        if(allies.contains(ally)){   
            for(String s: allies){
                if(s.equals(ally)){
                    allies.remove(s);
                }
            }
        }
                     mods.add(ally);
                     kingdoms.set(kingdom + ".allies", mods);
                     saveKingdoms();
                
           
           
           
           
        }
    Here is my code. There is a concurrentmodificationexception at this method, but I'm not sure where. The variable kingdoms is a config file.
     
  2. Post the full error log
     
  3. Offline

    Konato_K

    @Hex_27 Don't call add/remove operations in a Collection while you're iterating it (unless you're using an Iterator)
     
  4. Offline

    Hex_27

    @FisheyLP @Konato_K
    Code:
    org.bukkit.command.CommandException: Unhandled exception executing command 'k' in plugin Kingdoms v1
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCommand(CraftServer.java:645) ~[spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at net.minecraft.server.v1_8_R1.PlayerConnection.handleCommand(PlayerConnection.java:1115) [spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java:950) [spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java:26) [spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java:53) [spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13) [spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_11]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_11]
        at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:683) [spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316) [spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:623) [spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:526) [spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_11]
    Caused by: java.util.ConcurrentModificationException
        at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:886) ~[?:1.8.0_11]
        at java.util.ArrayList$Itr.next(ArrayList.java:836) ~[?:1.8.0_11]
        at me.leothepro555.main.Kingdoms.allyKingdom(Kingdoms.java:974) ~[?:?]
        at me.leothepro555.main.Kingdoms.onCommand(Kingdoms.java:471) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.8.jar:git-Spigot-eb39b47-0899683]
        ... 14 more
    [01:15:34] [Server thread/INFO]: Stopping the server
     
  5. Offline

    mythbusterma

    @Hex_27
     
  6. Offline

    Hex_27

    @mythbusterma I don't know where I'm touching the collection.
     
  7. Offline

    Scullyking

    @Hex_27
    Code:
    enemies.remove(s);
    Code:
    allies.remove(s);
    You're removing items from the List while iterating through it.
     
  8. Offline

    Hex_27

    @Scullyking this is my new code. But it still throws the error.
    Code:
        public void allyKingdom(String kingdom, String ally){
       
    
            List<String> enemies = kingdoms.getStringList(kingdom + ".enemies");
            List<String> allies = kingdoms.getStringList(kingdom + ".allies");
        if(enemies.contains(ally)){
           
            enemies.remove(ally);
           
        }
       
        if(allies.contains(ally)){   
          
        }else{
            allies.add(ally);
        }
                     kingdoms.set(kingdom + ".allies", allies);
                     kingdoms.set(kingdom + ".enemies", enemies);
                     saveKingdoms();
                
           
           
           
           
        }
    I'm not even iterating anymore

    Ok never mind. Didn't change the jar file. Thanks anyways.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 12, 2016
Thread Status:
Not open for further replies.

Share This Page