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>
danke dafür - Ich verbrachte Stunden damit, herauszufinden, dass dies heraus. – Matt
Gut zu wissen diese Frage war hilfreich für jemand anderen als mich. –