2009-05-16 5 views
4

Ich fing an, diese Frage zu stellen und fand dann die Antwort, bevor ich sie abschickte. Ich habe mich entschieden, die Frage trotzdem zu posten, damit andere Leute, die auf dasselbe Problem stoßen, aus meinen Fehlern lernen können.Applet Class Loader kann keine Klasse im Jar des Applets finden


Ich habe ein Problem mit einem Applet (a JApplet eigentlich) nicht in der Lage eine andere Klasse zu instanziieren, die im gleichen Gefäß wie das Applet enthalten ist. Die Ausnahme, die ich auf der Java-Konsole zu sehen bin ist:

 
Exception in thread "thread applet-com.company.program.cm.hmi.MediatorApplet-1" java.lang.NoClassDefFoundError: com/company/program/cm/cs/JDataStore 
    at com.company.program.cm.hmi.MediatorApplet.getMediator(MediatorApplet.java:63) 
    at com.company.program.cm.hmi.MediatorApplet.init(MediatorApplet.java:49) 
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: com.company.program.cm.cs.JDataStore 
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
    ... 4 more 
Caused by: java.io.IOException: open HTTP connection failed:http://localhost:8080/TransportHMI/pages/com/company/program/cm/cs/JDataStore.class 
    at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source) 
    at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source) 
    at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    ... 8 more 

Ich weiß, dass die JDataStore Klasse ist im Glas eingeschlossen. Wenn ich den Inhalt mit jar tvf CM_Library.jar auflisten sehe ich, dass es dort unter dem richtigen Paket ist. Die obigen verketteten Ausnahmen führen jedoch zu der Annahme, dass der Klassenlader das Archiv nicht nach JDataStore durchsucht und stattdessen auf dem Webserver nach der JDataStore.class-Datei sucht. Warum ist das? Der Class Loader weiß, dass die MediatorApplet-Klasse aus dem Jar geladen werden muss. Warum wird sie auch nicht nach JDataStore überprüft? Für den Fall, habe ich nicht die Parameter korrekt auf dem Applet-Tag angegeben ist, werde ich das auch hier ist:

<applet id="mediator-applet" 
     width="0" 
     height="0" 
     codebase="./" 
     archive="CM_Library.jar" 
     code="com.company.program.cm.hmi.MediatorApplet"> 
</applet> 

Antwort

8

Können Sie die Antwort aus der Betrachtung a suggestion für ein related question geschrieben. Eddies Antwort löste dieses spezielle Problem nicht, aber es gab mir die Lösung für meine.

Was aus meiner Frage nicht besonders offensichtlich ist, ist, dass die JDataStore-Klasse von einer anderen Klasse erbt, die in einem anderen Jar enthalten ist. Ich musste mich in ein paar Monaten nicht mit den Implementierungsdetails von JDataStore beschäftigen, also vergaß ich vollständig, dass seine Elternklasse, org.json.simple.JSONObject, nicht in CM_Library.jar war, sondern in json_simple-1.0 .2.jar. Die Lösung ist recht einfach, kopieren Sie einfach das fehlende Glas in das Code-Basis-Verzeichnis und fügen Sie das fehlende Glas auf die durch Kommata getrennte Liste von Archiven in dem Applet-Tag archive Attribut:

<applet id="mediator-applet" 
     width="0" 
     height="0" 
     codebase="./" 
     archive="CM_Library.jar, json_simple-1.0.2.jar" 
     code="com.company.program.cm.hmi.MediatorApplet"> 
</applet> 

, die den Fehler behebt. Die Ausnahmebedingungsnachricht ist nicht besonders hilfreich. Es würde Sie glauben machen, dass es die Klasse überhaupt nicht finden kann, wenn das eigentliche Problem darin besteht, dass es die Superklasse für die angeforderte Klasse nicht laden kann.

+0

danke dafür - Ich verbrachte Stunden damit, herauszufinden, dass dies heraus. – Matt

+0

Gut zu wissen diese Frage war hilfreich für jemand anderen als mich. –

Verwandte Themen