2010-02-24 16 views
5

Obtengo el ff. error en la consola de Java de vez en cuando:Applet class loader no puede encontrar una de las clases en el 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 

Mi etiqueta applet es el siguiente:

<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 importante subrayo la palabra "ocasionalmente". A veces, el applet se inicializa sin problemas. Esto también significa que, a menudo, cuando se reinicia el navegador, el problema desaparece.

Conozco applet fails to load class from jar y Applet class loader cannot find a class in the applet's jar pero creo que no son aplicables a mi caso. SomeClass y MyApplet están en el mismo contenedor y se está accediendo a la página localmente.

+0

Creo que lo que sucede es que el complemento del navegador Java no pudo cargar la clase desde myApplet__0.0.1177.jar y así fue buscarlo en la carpeta de la base de código. La pregunta ahora es ¿cómo es posible cargar MyApplet pero no SomeClass? –

+0

¿Qué versión de Java se usa en el lado del cliente? – uthark

+0

Usted dijo que se está accediendo a la página localmente, pero en los registros veo "myserver". ¿Es este el nombre de su máquina localhost? Además, ¿qué navegador usas para probar? Internet Explorer, Firefox? – uthark

Respuesta

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

Parece que hay un problema de conexión al recuperar el archivo jar del servidor HTTPS.

No sé exactamente qué versión de Java está ejecutando, pero puede verificar el motivo del defecto correspondiente a su problema here.

Si este no es el problema, entonces asegúrese de que haya suficiente almacenamiento en caché para su archivo JAR cuando se descargue, de lo contrario no se iniciará. Desafortunadamente no es un problema de código.

ACTUALIZACIÓN ¿Está su clase SomeClass accediendo a cualquier servidor remoto o base de datos por casualidad?

La excepción muestra claramente que hay un privilegio AccessControl que ha sido denegado.

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) 

Tenga en cuenta, que los applets son como objetos Flash:

  • Ambos están descargarse y ejecutarse desde el lado del cliente.

La única diferencia es que los applets fueron diseñados con una gran cantidad de reglas de control de acceso, tales como, no debe conectarse a los servidores ocultos detrás de la empresa DMZ (zona desmilitarizada), etc.

Si ese es el caso, yo sugiero que encontrar una manera de recuperar los datos fuera de applets (tratar servlet?)

ACTUALIZACIÓN 2 parece que la JVM no puede encontrar el certificado de confianza para que coincida con su jarra firmado.

  1. Debido a que su archivo jar es firmaron asegúrese de que el archivo JAR puede apuntar su certificado de confianza (recuerda, debe ser de confianza).
  2. más información, consulte: http://faq.javaranch.com/java/HowCanAnAppletReadFilesOnTheLocalFileSystem Y http://www.developer.com/article.php/3303561
+0

Si se trata de un problema de conexión, ¿no debería la URL en el mensaje de excepción ser https: // myserver/mycontext/applets/myApplet__0.0.1177.jar? Parece que el complemento busca el archivo de clase en la base de código. –

+0

Revisa mi publicación actualizada. –

+0

SomeClass no está accediendo a ningún servidor o base de datos remota. Sin embargo, está leyendo archivos del sistema de archivos local. Lo envolví en una llamada privilegiada. También he firmado los frascos. Creo que el complemento del navegador Java tiene acceso privilegiado. –

Cuestiones relacionadas