2010-02-24 15 views
5

Ottengo la ff. errore nella Java Console occassionally:Il caricatore di classi di applet non riesce a trovare una delle classi nel jar

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 

mio tag applet è la seguente:

<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> 

E 'importante sottolineo la parola "di tanto in tanto". A volte l'applet viene inizializzata senza intoppi. Ciò significa anche che, spesso, quando il browser viene riavviato, il problema scompare.

Sono consapevole applet fails to load class from jar e Applet class loader cannot find a class in the applet's jar ma penso che non sono applicabili al mio caso. SomeClass e MyApplet si trovano nello stesso contenitore e la pagina è accessibile localmente.

+0

Penso che quello che succede è che il plug-in del browser Java non è stato in grado di caricare la classe da myApplet__0.0.1177.jar e così è andato a cercarlo nella cartella del codebase. La domanda ora è che è in grado di caricare MyApplet ma non SomeClass? –

+0

Quale versione di Java è utilizzata sul lato client? – uthark

+0

Hai detto che la pagina è accessibile localmente, ma nei log vedo "myserver". È questo il nome della tua macchina localhost? Inoltre, quale browser usi per testare? Internet Explorer, Firefox? – uthark

risposta

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

Questo appare come c'è un problema di connessione con il recupero del file jar dal server HTTPS.

Non so esattamente quale versione di Java stai eseguendo, ma puoi controllare il motivo del difetto relativo al tuo problema here.

Se questo non è il problema, assicurati che ci sia abbastanza cache per il tuo file JAR quando scaricato, altrimenti non si avvia. Sfortunatamente non è un problema di codice.

UPDATE La tua classe SomeClass accede a qualsiasi server o database remoto per caso?

L'eccezione indica chiaramente che è stato negato il privilegio AccessControl.

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) 

Tenete a mente, che le applet sono come Flash Oggetti:

  • Entrambi sono scaricati ed eseguiti dal lato client.

L'unica differenza è che le applet sono stati progettati con un sacco di regole di controllo dell'accesso, come, non deve connettersi al server nascosti dietro società DMZ (De-Militarized Zone), ecc

Se questo è il caso, vi suggerisco di trovare un modo per recuperare i vostri dati al di fuori applet (provate servlet?)

UPDATE 2 sembra che la JVM non riesce a trovare il certificato attendibile da abbinare con il vostro vaso firmato.

  1. Dal momento che il file jar è firmato assicurarsi che il file jar può puntare il certificato attendibile (ricordate, si deve essere attendibile).
  2. ulteriori informazioni, consultare: http://faq.javaranch.com/java/HowCanAnAppletReadFilesOnTheLocalFileSystem E http://www.developer.com/article.php/3303561
+0

Se si tratta di un problema di connessione, l'URL nel messaggio di eccezione non dovrebbe essere https: // myserver/mycontext/applets/myApplet__0.0.1177.jar? Sembra che il plug-in stia cercando il file di classe stesso nel codebase. –

+0

Controlla il mio post aggiornato. –

+0

SomeClass non sta accedendo a nessun server o database remoto. Tuttavia, sta leggendo i file dal filesystem locale. L'ho avvolto in una chiamata privilegiata. Ho anche firmato i barattoli. Penso che il plug-in del browser Java stia facendo l'accesso privilegiato. –

Problemi correlati