Fehler beim AsyncPlayerChatEvent

Dieses Thema im Forum "Programmierung" wurde erstellt von Darkblader24, 6. Mai 2013.

  1. Darkblader24
    Offline

    Darkblader24

    Registriert seit:
    22. August 2012
    Beiträge:
    79
    Ort:
    Chemnitz
    Minecraft:
    Darkblader24
    Hallo

    Ich bekomme in meinem Plugin jeden Tag ein paar mal folgenden Fehler:

    Code (Text):
    1. 2013-05-06 18:24:47 [SEVERE] Could not pass event AsyncPlayerChatEvent to PPS v3.0
    2. org.bukkit.event.EventException
    3.     at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
    4.     at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    5.     at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:26)
    6.     at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:479)
    7.     at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:461)
    8.     at net.minecraft.server.v1_5_R3.PlayerConnection.chat(PlayerConnection.java:900)
    9.     at net.minecraft.server.v1_5_R3.PlayerConnection.a(PlayerConnection.java:840)
    10.     at net.minecraft.server.v1_5_R3.Packet3Chat.handle(Packet3Chat.java:44)
    11.     at org.spigotmc.netty.NettyNetworkManager$2.run(NettyNetworkManager.java:113)
    12.     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    13.     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    14.     at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    15.     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    16.     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    17.     at java.lang.Thread.run(Thread.java:722)
    18. Caused by: java.util.ConcurrentModificationException
    19.     at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)
    20.     at java.util.ArrayList$Itr.next(ArrayList.java:791)
    21.     at de.PPS.Chat.Chat.sendChatroomMessage(Chat.java:547)
    22.     at de.PPS.Chat.Chat.Chat(Chat.java:504)
    23.     at sun.reflect.GeneratedMethodAccessor213.invoke(Unknown Source)
    24.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    25.     at java.lang.reflect.Method.invoke(Method.java:601)
    26.     at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
    27.     ... 14 more

    Daraufhin stüzt der Server ab und es werden sämtliche Spieler gekickt. Und nach ca 20 Sekunden kann man dann einfach wieder drauf joinen, als wäre nix gewesen.

    Mein Code auf Zeile 504 ist folgender

    Code (Text):
    1. sendChatroomMessage("Global", nachricht);
    In der Methode, die da aufgerufen wird, steht folgendes:

    Code (Text):
    1. public static void sendChatroomMessage(String chatraum,String nachricht){
    2.     if(chatraum.equalsIgnoreCase("Global")){
    3.         for (Player GlobaleP : GlobalChat) {
    4.             GlobaleP.sendMessage(nachricht);
    5.         }
    6.     }
    7.     if(chatraum.equalsIgnoreCase("Clan")){
    8.         for (Player ClanP : ClanChat) {
    9.             ClanP.sendMessage(nachricht);
    10.         }
    11.     }
    12. }
    Wo liegt hier der Fehler?
    Das komische ist, dass das nur manchmal passiert.

    Vielen Dank im Vorraus :)
     
    #1
  2. games6471
    Online

    games6471

    Dein GlobalChat oder ClanChat wird während dem Iterieren verändert.

    Die nervigste Exception welche auftritt beim Arbeiten mit mehren Threads.
     
    #2
  3. Darkblader24
    Offline

    Darkblader24

    Registriert seit:
    22. August 2012
    Beiträge:
    79
    Ort:
    Chemnitz
    Minecraft:
    Darkblader24
    Stimmt! Es werden ja dauernd Leute in der Liste verändert, da ja ständig welche joinen oder quitten.
    Aber wie kann ich dann soetwas beheben?
     
    #3
  4. Crafter6432
    Offline

    Crafter6432

    Registriert seit:
    22. Dezember 2011
    Beiträge:
    686
    #4
  5. ChristianG
    Online

    ChristianG

    Faustregel:
    Nicht auf die Bukkit API ausm Sheduler direkt zugreifen!
     
    #5