|
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Basti Neuling
Geschlecht:  Anmeldungsdatum: 16.02.2007 Beiträge: 16 Wohnort: Schönebeck
|
Verfasst am: 05.03.2007, 22:39 Titel: java.lang.LinkageError: Class xy/xy violates loader |
|
|
Hi Leute,
ich habe hier gerade ne hübsche Exception heraufbeschworen, die keine ist.
Folgender Sachverhalt:
Mein Hund besteht aus verschiedenen Klassen.
Meine eigentliche KI heißt SKDDog und ordnet beim Erzeugen jedem
Hund das "Gehirn" aus der Klasse SKDDogAI zu (mit jeweiligen Parametern).
Da die Hunde aber alle etwas gemeinsam haben, speichere ich diese Gemeinsamkeit in der Klasse SKDDog als Variable.
Damit jeder Hund nun auf diese Gemeinsamkeiten zugreifen kann,
übergebe ich beim Erzeugen der jeweiligen Instanz von SKDDogAI die Instanz SKDDog - als parent/übergeordnete Klasse sozusagen.
Dadurch kann ich nun über meine variable parent.gemeinsamkeit1 etc. auf die gemeinsamen Dinge zugreifen.
Das Problem ist Folgendes:
Wenn ich die sheep.jar ausführe, funktioniert alles bestens.
Wenn ich das Projekt aber über Eclipse starte / debugge, komme ich bis zum Start Button. Sobald dieser geklickt wird, kommt folgende Exception und die Simulation fängt gar nicht erst an zu laufen:
| Zitat: |
Exception in thread "Timer-0" java.lang.LinkageError: Class SKDDog/SKDDog violates loader constraints
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at SKDDog.SKDDogAI.think(SKDDogAI.java:35)
at app.logic.Dog.think(Dog.java:81)
at app.logic.Field.step(Field.java:306)
at app.logic.GameRunner$1.run(GameRunner.java:51)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
|
Das Problem muss mit dem Zugriff auf Variablen aus der anderen Klasse zusammenhängen, denn anfangs konnte ich das zu Testzwecken weglassen und dann funktionierte es.
Allerdings finde ich keine andere Möglichkeit diesen Zugriff zu realisieren.
Das wirklich störende ist halt, dass ich dadurch nicht mehr mit Eclipse debuggen kann. Aber Laufen tut es halt.
Hat jemand eine Lösung für das Problem? Ist das vielleicht nur so eine Art Sicherheitshinweis in Eclipse, den man irgendwie abschalten kann? |
|
| Nach oben |
|
 |
zet Forumsjunki
Anmeldungsdatum: 05.02.2007 Beiträge: 85
|
Verfasst am: 07.03.2007, 09:07 Titel: |
|
|
Kannst du mir deine KI als ZIP mal schicken? Dann kann ich das mal selber austesten. => eike 'at' cube3d.de
Könnt nur ein bisschen dauen (1-2 tage) |
|
| Nach oben |
|
 |
Micha Neuling
Anmeldungsdatum: 07.02.2007 Beiträge: 9
|
Verfasst am: 07.03.2007, 16:51 Titel: |
|
|
Ähem ich glaube du hast beim Konfiguren des Run-dingens nicht an die Anleitung gehalten, hatte nämlich den gleichen Fehler, dass er / anstatt des üblichen . benutzt (SKDDog/SKDDog müsste SKDDog.SKDDog).
Funktionierte dann aber ohne Probleme nachdem ich das Run nochmal wie in der Anleitung beschrieben, neu eingerichtet habe. |
|
| Nach oben |
|
 |
Basti Neuling
Geschlecht:  Anmeldungsdatum: 16.02.2007 Beiträge: 16 Wohnort: Schönebeck
|
Verfasst am: 09.03.2007, 17:07 Titel: |
|
|
Hi, ich habe das Projekt jetzt nochmal neu in Eclipse eingebunden und siehe an, es funktioniert.
Da muss ich wohl etwas gepennt haben, als ich das zum ersten Mal eingebunden habe.
Naja egal - danke für den Tipp  |
|
| Nach oben |
|
 |
Senior Sanchez Forumsjunki
Anmeldungsdatum: 07.02.2007 Beiträge: 61
|
Verfasst am: 22.03.2007, 12:19 Titel: |
|
|
Also ich nutze kein Eclipse, aber bei mir tritt der Fehler auch auf.
Wo muss man da etwas umkonfigurieren, dass anstatt / nun . benutzt wird? |
|
| Nach oben |
|
 |
Basti Neuling
Geschlecht:  Anmeldungsdatum: 16.02.2007 Beiträge: 16 Wohnort: Schönebeck
|
Verfasst am: 22.03.2007, 14:55 Titel: |
|
|
Umkonfigurieren würde ich sein lassen, das habe ich auch erst versucht aber endete im Chaos.
Mach dir vorsichtshalber eine Kopie deines KI Ordners und dann löscht du das gesamte Projekt aus deiner Programmierumgebung.
Danach fügst du deine KI genau wie unter
http://digger.cs.uni-magdeburg.de/~decker/schaf/index.php/Dokumentation/Installation
beschrieben wieder ein. ABER: Die ersten beiden Passagen unter der Überschrift "Entwickeln in Eclipse" überspringst du.
Weiter unten beginnt ein Abschnitt mit "Man kann auch das Spiel aus Eclipse heraus laden, indem man [...]" - genau da fängst du erst an. Ignorier einfach, dass da Eclipse steht und versuch in deinem Programm ähnliche Beschriftungen zu finden
Bei mir ging es danach ohne Probleme. |
|
| Nach oben |
|
 |
Senior Sanchez Forumsjunki
Anmeldungsdatum: 07.02.2007 Beiträge: 61
|
Verfasst am: 22.03.2007, 16:10 Titel: |
|
|
Hmm, so recht hilft mir das auch nicht weiter. IDEA (meine IDE) ist halt doch nen Stückchen anders.
Das scheint doch grundsätzlich irgendwie ein Classpath-Problem zu sein. Angeblich tritts auf wenn ein und dieselbe Klasse von zwei verschiedenen Orten geladen wird, aber das kann ich glaube ich schon ausschließen.
Was verursacht nun diese Probleme? |
|
| Nach oben |
|
 |
Senior Sanchez Forumsjunki
Anmeldungsdatum: 07.02.2007 Beiträge: 61
|
Verfasst am: 23.03.2007, 11:52 Titel: |
|
|
Ich habe gerade jetzt eine Lösung gefunden, die funktioniert, die ich aber eben trotzdem seltsam finde
Bei meiner IDE habe ich einfach bei der Run Configuration mittels VM Parameter den Classpath so beschränkt, dass er nur auf sheep.jar zeigt.
Diese Lösung ist zwar ziemlich dirrrrty, aber scheinbar funktioniert sie.
Das Problem scheint dabei folgendes zu sein: Es gibt wohl zwei konkurrierende Classloader. Einer direkt von der JVM die in der IDE läuft und der andere von app.Sheep. Der erstgenannten scheint nun die Klassen in seinem Classpath zu laden. Danach lädt dann app.Sheep selber eigene Klassen und da meine Klasse jetzt anscheinend nochmal geladen wird, aber diesmal von einem anderen Classloader, kommt es wohl zu dieser Fehlermeldung. |
|
| Nach oben |
|
 |
|