• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

ConcurrentModificationError außerhalb meines Plugins

G.A.F

Redstoneengineer
Registriert
13 Oktober 2013
Beiträge
38
Diamanten
0
Heyho Leute,

ich bin gerade dabei ein Plugin zu schreiben (Mit der Bukkit Lib) und verzweifle grade.
Ein Spiel beginnt, alles läuft normal und dann nach einer unbestimmten Zeit gibt es > diesen < Error...

Ich habe also die Stelle dem Error entnommen und gleich die Bukkit decompiled und > diese < Klasse als Quelle des Fehlers ausfindig machen können...
(Hier ist es die Zeile 245)

Leider habe ich weder eine Ahnung was der Fehler ist, noch wie der Fehler mit meinem Plugin zusammenhängt, noch wie ich ihn beheben kann :/
Übrigens: Wenn ich mein Plugin rausnehme gibt es keinen Error, soweit ich das sehen konnte.

Ich hoffe jemand kann mir helfen :)

MfG Mineworker08 ~ G.A.F
 

ShareLock

Kuhfänger
Registriert
2 November 2011
Beiträge
66
Alter
58
Diamanten
0
Achtung: Synchron und Asynchron sind beides valide Konzepte. Ich spreche hier nicht davon, dass eines Schlechter ist als das andere. Es hat eben beides Vor- und Nachteile.

Synchron: Wird im Mainthread gestartet. -> Wenn der Thread blockiert, dann blockiert alles.
Synchrone Tasks sollten nicht blockieren (Beispielsweise Datenbank Zugriffe blockieren, weil zuerst gesucht werden muss), damit eben die Hauptlogik (z.B. Blockupdates) laufen kann.

Asynchron ist NICHT im Mainthread. Dadurch kannst du blockieren, warten, schlafen und machen was du willst. Problem ist nur, dass asynchron "mehr" Leistung verbraucht. Wenn du aber auf kritische Pfade zugreifen willst, dann musst du synchronisieren und auf den Thread gehen, der diesen Pfad "verwaltet". Bei Bukkit ist dies eigentlich immer der Mainthread (Ohne Pluginintegrationen zu beachten!), daher kann man hier Thread Sicherheit mit Synchronem und Asynchronem Verhalten nur auf diesen beziehen.

Optimalerweise ist es so, dass du alles im asynchronen Thread laufen lässt und nur die notwendigsten Teile synchronisiert laufen, da es so am "schnellsten" läuft. Schnelligkeit an sich ist hier nicht das Problem, aber: Stell dir vor alle Plugins laufen nur Synchron, dann würde der Mainthread zu lange zum updaten brauchen, es kommt zu lags.

PS: Eine relevante Vorlesung findest du hier. Es ist zwar hier ein anderer Bereich, aber das Wissen, welches hier vermittelt wird fördert das Verständnis für Threads.
 

G.A.F

Redstoneengineer
Registriert
13 Oktober 2013
Beiträge
38
Diamanten
0
Vielen Dank Dir erstmal :) Es ist nicht selbstverständlich, dass du das machst...

Nun verstehe ich den Post mit der Frage "Warum lässt du das Asynchron laufen?" nicht mehr Oo Ich meine, dass ist doch wohl die sinnvollste möglichkeit, oder?
 

ShareLock

Kuhfänger
Registriert
2 November 2011
Beiträge
66
Alter
58
Diamanten
0
Warum lagerst du soetwas auch in einen asynchronen Thread aus? Du lässt praktisch ein ganzes Spiel in einem eigenen Thread laufen. Das ist zwar vom Grundgedanken kein Totalausfall, aber im Fall von Bukkit einfach nur unsinnig.
Asynchron ist hier sogar ziemlich sinnig. Nachrichten sind auch Asynchron.
Sasuke scheint hier wahrscheinlich seine Spiele komplett Synchron laufen zu lassen.
Das kann man machen, weil es einfacher ist. Klug ist das aus den oben genannten Gründen nicht.
 

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
299
Minecraft
FelixKlauke
Sasuke scheint hier wahrscheinlich seine Spiele komplett Synchron laufen zu lassen.
Das kann man machen, weil es einfacher ist. Klug ist das aus den oben genannten Gründen nicht.

lässt praktisch ein ganzes Spiel

Das soll aussagen, dass es man zwar Teile davon asynchron laufen lassen kann, aber das meiste aufgrund von Bukkit synchron bleiben muss.
 

G.A.F

Redstoneengineer
Registriert
13 Oktober 2013
Beiträge
38
Diamanten
0
Alles klar :) Jedenfalls vielen Dank an Euch, jetzt wo ich die ItemDrops ausgelagert habe geht alles wieder gut :)

Mal sehen ob ich direkt die nächste Frage beantwortet bekomme:

Ich habe mir nach >diesem< Tutorial eigene Shops programmiert, wie es beschrieben wurde (Klassen in der Beschreibung)...
Erstaunlicherweise funzt alles, nur wenn ich etwas beim Villager gekauft habe und den Block dann setze oder im Inventar anklicke, wird der Trade wieder zurückgesetzt und ich bekomme meine Ausgangsitems zurück :/

Ist das ein bekannter Fehler?
Kennt sich da vlt wer aus?
 
Oben