2010-02-24 10 views
5

Ich bekomme die ff. Fehler in Java Console occassionally:Applet Klassenladeprogramm kann keine der Klassen im Jar finden

Exception in thread "thread applet-my.package.MyApplet-10" java.lang.NoClassDefFoundError: another/package/SomeClass 
    at my.package.MyApplet.init(MyApplet.java:95) 
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: another.package.SomeClass 
    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) 
    ... 3 more 
Caused by: java.io.IOException: open HTTP connection failed:https://myserver/mycontext/applets/another/package/SomeClass.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) 
    ... 7 more 

ist mein Applet-Tag wie folgt:

<applet codebase="../../applets" code="my.package.MyApplet" class="invisible" id="myApplet"> 
    <param value="value0" name="param0"/> 
    ... 
    <param value="valueN" name="paramN" /> 
    <param value="folder/myApplet__0.0.1177.jar,folder/commons-io-1.3.2__0.0.1177.jar,..." name="cache_archive"/> 
    <param value="0.0.1177.0,0.0.1177.0,...," name="cache_version"/> 
</applet> 

Es ist wichtig, ich das Wort "gelegentlich" betonen. Manchmal wird das Applet ohne Probleme initialisiert. Dies bedeutet auch, dass das Problem oft beim Neustart des Browsers verschwindet.

Ich kenne applet fails to load class from jar und Applet class loader cannot find a class in the applet's jar, aber ich denke, dass sie nicht auf meinen Fall anwendbar sind. SomeClass und MyApplet befinden sich im selben Jar und auf die Seite wird lokal zugegriffen.

+0

Ich denke, was passiert ist, dass das Java-Browser-Plug-in nicht in der Lage war, die Klasse von myApplet__0.0.1177 zu laden.jar und so ging es im Codebase-Ordner suchen. Die Frage ist nun, wie kann ich MyApplet, aber nicht SomeClass laden? –

+0

Welche Java-Version wird auf der Clientseite verwendet? – uthark

+0

Sie haben gesagt, dass auf die Seite lokal zugegriffen wird, aber in Protokollen sehe ich "myserver". Ist dieser Name Ihres lokalen Host-Computers? Auch welchen Browser verwenden Sie zum Testen? Internet Explorer, Firefox? – uthark

Antwort

1
Caused by: java.io.IOException: open HTTP connection failed:https://myserver/mycontext/applets/another/package/SomeClass.class 

Dies scheint ein Verbindungsproblem beim Abrufen der JAR-Datei vom HTTPS-Server.

Ich weiß nicht genau, welche Version von Java Sie ausführen, aber Sie können den Grund des Fehlers für Ihr Problem here überprüfen.

Wenn dies nicht das Problem ist, stellen Sie sicher, dass genügend Caching für Ihre JAR-Datei vorhanden ist, wenn sie heruntergeladen wird, da sie sonst nicht gestartet werden kann. Es ist leider kein Code-Problem.

UPDATE Ist Ihre Klasse SomeClass auf einen beliebigen Remote-Server oder eine Datenbank zugreifen?

Die Ausnahme zeigt deutlich, dass eine Berechtigung AccessControl verweigert wurde.

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) 

Beachten Sie, dass Applets wie Flash sind Objekte:

  • Sie sind beide heruntergeladen und von der Clientseite ausgeführt werden.

Der einzige Unterschied besteht darin, dass Applets mit vielen Zugriffskontrollregeln entworfen wurde, wie es hinter Firma DMZ (Demilitarisierte Zone) zu Servern versteckte nicht anschließen müssen, usw.

Wenn das der Fall ist, Ich schlage vor, Sie finden einen Weg, um Ihre Daten außerhalb Applets (versuchen Sie Servlet?)

UPDATE 2 Es scheint, die JVM kann das vertrauenswürdige Zertifikat nicht finden, um mit Ihrem unterschriebenen Glas zu entsprechen.

  1. Da Ihr JAR-Datei ist unterzeichnet sicher, dass die JAR-Datei Ihr vertrauenswürdiges Zertifikat zeigen können (denken Sie daran, muss er vertraut werden).
  2. Weitere Informationen finden Sie auf: http://faq.javaranch.com/java/HowCanAnAppletReadFilesOnTheLocalFileSystem UND http://www.developer.com/article.php/3303561
+0

Wenn es sich um ein Verbindungsproblem handelt, sollte die URL in der Ausnahmebedingungsnachricht stattdessen https: // myserver/mycontext/applets/myApplet__0.0.1177.jar lauten? Es scheint, dass das Plug-in nach der Klassendatei selbst in der Codebasis sucht. –

+0

Überprüfen Sie meinen aktualisierten Beitrag. –

+0

SomeClass greift nicht auf einen Remote-Server oder eine Datenbank zu. Es liest jedoch Dateien aus dem lokalen Dateisystem. Ich habe das in einen privilegierten Anruf verpackt. Ich habe auch die Gläser unterschrieben. Ich denke, das Java-Browser-Plugin macht den privilegierten Zugriff. –

Verwandte Themen