2012-09-17 23 views
11

Estoy tratando de explorar las capacidades de datos de URL para incrustar en el applet HTML de Java.Incrustar applet de Java a través de datos de URL

La documentación, para las etiquetas HTML para ejemplificar un applet java 1, no excluye esta opción, pero parece que no puedo hacerlo.

que tienen diferentes variaciones de los valores de las etiquetas HTML usando (objeto y applet) y lo que pienso vine cerca de mi objetivo era la siguiente:

<object type="application/x-java-applet" width="100" height="100"> 
    <param name="archive" value="data:application/java-archive;base64,BASE64_OF_JAR"/> 
    <param name="code" value="test.class"/> 
    <h1>not working</h1> 
</object> 

Este resultado variación en un IlegalArgumentException con el texto "Nombre". Verifico esto haciendo clic en el icono de error en el navegador. En la consola de Java todo el seguimiento de la pila es:

java.net.MalformedURLException: unknown protocol: data 
     at java.net.URL.<init>(Unknown Source) 
     at java.net.URL.<init>(Unknown Source) 
     at sun.plugin.util.ProgressMonitorAdapter.setProgressFilter(Unknown Source) 
     at sun.plugin2.applet.Plugin2Manager.setupProgress(Unknown Source) 
     at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 

¿Alguien tiene una idea acerca de cómo hacer esto o si no es posible?

PS: Hay un ejemplo de cómo incrustar un JNLP en HTML por Oracle here

+0

Tengo que admitir que no leí la publicación detenidamente el otro día y me perdí ese último enlace. Resulta intrigante que un JNLP pueda codificarse en base 64 .. –

+0

¿Qué sucede si intercambias 'data: application/java-archive' con' data: application/x-java-archive'? –

+0

Es la misma excepción. no parece El controlador de plugin para reconocer la URL de los datos, que sería bueno para ver el código fuente del plugin :) La excepción completo: http://pastebin.com/ddsDSTQg – user823959

Respuesta

5

El elemento HTML4 specification para OBJETO permite incrustar datos en línea a través de URL DATA y la instanciación de Applet documentation de Oracle también lo permite. Las pruebas realizadas muestran el complemento de navegador Java (de Oracle) y el código fuente disponible desde Java SE 6, muestra que la implementación no lo admite.

En este caso, no parece importar si el navegador lo admite, ya que el recurso de recursos de referencia de referencia en el elemento HTML Objeto/Applet se realiza mediante el complemento del navegador.

Una alternativa sería la deserialización de applet de uso, serializada a través de URL DATA, utilizando el atributo OBJECT APPLET element. Como se menciona en la especificación HTML4, no hay soporte activo para los atributos APPLET y OBJECT, y JRE no parece ser compatible con la deserialización de Objetos desde URL DATA también.

En pocas palabras, JRE no es compatible con la deserialización de base64 en los atributos CÓDIGO, OBJETO y ARCHIVO HTML.

También hay un ERROR relacionado con el soporte de URL DATA en JRE1.4.1 que no se cumplió Bug ID: 4756961.

Los resultados de mis pruebas con JRE7 en una máquina de 64 bits de Windows son los siguientes:

  • Pasar un JAR a través de datos URL para ARCHIVO atribuir los resultados en una IllegalArgumentException en Applet2Manager.loadJarFiles();
  • Pasar una clase a través de los atributos de URL al atributo CÓDIGO da como resultado una excepción ClassNotFoundException en Applet2ClassLoader.findClass();
  • Pasar un applet serializado a través de los atributos URL OBJETO da como resultado en un FileNotFoundException en Plugin2ClassLoader.getResourceAsResource().
+0

excelente respuesta, bien investigado con enlaces útiles. Ojalá pudiera votar más de una vez. – bonsaiviking

2

Incluso si es permisible para los estándares HTML, JRE no suelen comprender los datos base64.

Cuestiones relacionadas