2010-11-23 15 views
6

Quiero correr sencillo aplique en mi aplicación web utilizando etiqueta HTML del applet pero da error comoejecución del applet en la aplicación web

java.lang.ClassNotFoundException: MyApplet

favor, dame aplicación de la muestra, si es posible .....

+3

Muestra la etiqueta completa que has utilizado para insertar el applet. – Mudassir

+0

chetan

+0

esta es la etiqueta applete que utilicé – chetan

Respuesta

9

el problema es que el motor applet no puede encontrar su clase MyApplet en el código base se ha definido.

Esto puede deberse a que tiene su clase en su directorio/WEB-INF/classes. Este directorio está protegido por el motor de servlet, para que no se pueda acceder desde recursos externos (como puede ser una etiqueta de applet en una página JSP/HTML.

Hay algunas maneras de resolver esto. La más fácil es empaquete su clase MyApplet en un archivo jar (llamémoslo myapplet.jar) y guárdelo en un directorio accesible (es decir, la carpeta jsp de su aplicación web). Como ejemplo, suponga que tiene las siguientes carpetas para la aplicación web:

/MyWebApp/jsp 
/MyWebApp/applet 
/MyWebApp/WEB-INF 

los exploradores de los clientes pueden acceder al contenido de las carpetas JSP y applets.

A continuación, guarde su myapplet.jar en la carpeta applet, y establecer la configuración de etiqueta applet como esto (suposing que contexto web es MyWebApp):

<applet codebase="/MyWebApp/applet" archive="myapplet.jar" 
     code="MyApplet.class" width="600" height="500"> 
</applet> 

Aquí puede encontrar más información sobre la etiqueta applet: http://docs.oracle.com/javase/tutorial/deployment/applet/index.html

+1

Por favor, edite su respuesta para incluir una etiqueta de applet de cierre y atributos de ancho/alto. El HTML que se muestra no es válido, y es una lástima empañar una respuesta tan buena con trivialidades como HTML no válido. También tenga en cuenta que muchas cosas han cambiado en los applets (y particularmente en el despliegue de applet) desde 1.4.2, por lo que es útil buscar los documentos. para 1.6 si es posible. Con ese fin, puede escanear algunos de los enlaces en la entrada Wiki de applet, mencionados en mis otros comentarios. –

+0

@Andrew: hecho. Thnaks para señalarlo –

0

Comprueba 2 cosas. 1. la base de código es correcta. Para comprobar que está escrito correctamente, redacte la URL completa (URL de su página + base de código) y pruébela directamente en el navegador. Asegúrate de que sea correcto.

  1. El nombre de la clase está escrito correctamente. Debe ser el nombre de clase completo (incluyendo el nombre del paquete)

Si esto no funciona, envíe su etiqueta de aquí

+1

La etiqueta del applet BTW está en desuso en HTML 5 y Chrome no la admite en absoluto. Por lo tanto, le recomendaría que use la etiqueta en su lugar – AlexR

+0

1) El elemento del applet quedó en desuso en HTML 4.01, no en 5. 2) Acabo de descargar Chrome 9.0.597.98 y lo apunté a un pequeño par de miniaplicaciones en mi cámara sitio que usa el elemento de applet (http://pscode.org/test/appletresource/applet.html). Funcionó muy bien a pesar de que la página no declaró ninguna versión HTML (travieso). Entonces, Chrome definitivamente reconoce el elemento de applet (a). 3) Utilice el elemento objeto e inmediatamente pierda los navegadores basados ​​en Mozilla. Es una lástima que aún no hayan abandonado el elemento embebido tonto y hayan aceptado el estándar aceptado, pero así son las cosas. ... –

+1

... cont. .. como resultado de la debacle object/embed, recomendaría usar la secuencia de comandos 'deployJava.js' (perseguir los enlaces de http://stackoverflow.com/tags/applet/info) para implementar applets. No es una solución perfecta, pero debido a que Oracle alienta a los desarrolladores a conectarse en caliente y la admite, es una de las ** mejores ** opciones de implementación para los applets. (a) Estaba engañando el hecho de que Java ya estaba instalado y supongo que Chrome fue lo suficientemente inteligente como para elegir la instalación actual y usarla. Pero ese no es el punto. Chrome ** no ** reconoce el elemento del applet cuando se instala Java. –

1

Tema viejo, lo sé ... pero he creado un pequeño truco que le permite servir applets que están dentro de su carpeta WEB-INF/clases para que no necesite un frasco adicional en su proyecto (y puede volver a implementar su applet un poco más rápido). La desventaja de esto es que no puedes firmar tu applet (porque es una clase. No un contenedor). Vamos al grano aquí ...

En primer lugar, crear un poco de servlet que sirve applets (Requiere Javassist):

public class AppletServlet implements Servlet { 
... 
ClassPool pool = ClassPool.getDefault(); 

@Override 
public void init(ServletConfig config) throws ServletException { 
    pool.insertClassPath(new ClassClassPath(this.getClass())); 
} 

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { 
    String className = ((HttpServletRequest) req).getPathInfo().substring(1); 
    try { 
     CtClass cc = pool.get(className.replace("/", ".").replace(".class", "")); 
     res.setContentType("application/x-java-applet;version=1.5.0"); 
     res.setContentLength(cc.toBytecode().length); 
     res.getOutputStream().write(cc.toBytecode()); 
     res.getOutputStream().close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
... 
} 

Ahora declarar su AppletServlet (lo sé, nombre terrible) como un servlet en su web.xml:

<servlet> 
    <servlet-name>Applet Servlet</servlet-name> 
    <servlet-class>com.example.AppletServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Applet Servlet</servlet-name> 
    <url-pattern>/applet/*</url-pattern> 
</servlet-mapping> 

Por último, invocar el applet desde su página:

<object type="application/x-java-applet" height="300" width="550"> 
    <param name="codebase" value="applet/" /> 
    <param name="code" value="com.example.MyApplet" /> 
    <param name="teste" value="teste"></param> 
    Applet failed to run. No Java plug-in was found. 
</object> 

Y eso es todo. El servlet usará Javassist para obtener el código de bytes para su clase y servirlo a la solicitud.

Descargo de responsabilidad Si alguien conoce su estructura de paquete, podría descargar todas las clases y hacer cosas malas desde allí. Así que asegúrese de que solo permita que el servlet sirva clases que en realidad son applets.

+0

Buena idea, pero no compila, ¿de dónde viene el "grupo"? – Oversteer

+0

Mi mal. Ejemplo clásico de errores debido a copiar y pegar;) Debería funcionar ahora – Andre

Cuestiones relacionadas