2012-09-17 15 views
11

Sto cercando di esplorare le funzionalità dei dati URL da incorporare nell'applet Java HTML.Incorpora applet Java tramite i dati URL

La documentazione, per i tag HTML per l'istanziazione di un'applet java 1, non esclude questa opzione, ma non mi sembra che sia in grado di farlo.

devo diverse varianti di valori di tag HTML usando (oggetto e applet) e quello che penso è venuto vicino al mio obiettivo era questo:

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

Questo risultato variazione di un IlegalArgumentException con il testo "nome". Controllo questo cliccando sull'icona di errore sul browser. Sulla console Java tutta la traccia dello stack è:

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) 

Qualcuno ha un'idea su come fare questo o se non è possibile?

PS: C'è un esempio di come incorporare un JNLP in HTML da parte di Oracle here

+0

Devo ammettere che non ho letto attentamente il post l'altro giorno e ho perso l'ultimo collegamento. Intrigante che un JNLP possa essere codificato in base 64 .. –

+0

Cosa succede se scambiate 'data: application/java-archive' con' data: application/x-java-archive'? –

+0

È la stessa eccezione. Il gestore di plugin non sembra riconoscere l'URL DATI, sarebbe bello vedere il codice sorgente del plugin :) L'eccezione completa: http://pastebin.com/ddsDSTQg – user823959

risposta

5

L'elemento HTML4 specification per OBJECT consente l'incorporamento dei dati in linea tramite URL DATA e l'istanza di Applet documentation da Oracle consente anche questo. I test eseguiti mostrano il plug-in del browser Java (da Oracle) e il codice sorgente disponibile da Java SE 6, indica che l'implementazione non lo supporta.

In questo caso, non sembra importare se il browser lo supporta, poiché la gestione delle risorse di riferimento delle risorse nell'elemento HTML Oggetto/Applet viene eseguita dal plug-in del browser.

Un'alternativa sarebbe quella di utilizzare la deserializzazione delle applet, serializzata tramite URL DATA, utilizzando l'attributo OBJECT di APPLET element. Come menzionato nelle specifiche HTML4, non esiste un supporto attivo per l'attributo APPLET e OBJECT, e JRE non sembra supportare la deserializzazione degli oggetti anche da URL DATA.

In breve, JRE non supporta la deserializzazione di base64 negli attributi HTML CODICE, OGGETTO e ARCHIVIO.

Esiste anche un bug relativo al supporto dei dati URL in JRE1.4.1 non soddisfatto Bug ID: 4756961.

I risultati dei miei test con JRE7 in un computer a 64 bit di Windows sono i seguenti:

  • passaggio di un JAR attraverso i dati URL ARCHIVIO attribuire i risultati in un IllegalArgumentException in Applet2Manager.loadJarFiles();
  • Il passaggio di una classe tramite l'attributo URL DATA a CODE genera una classe ClassNotFoundException in Applet2ClassLoader.findClass();
  • Il passaggio di un'applet serializzata tramite URL DATA all'attributo OBJECT genera un oggetto FileNotFoundException in Plugin2ClassLoader.getResourceAsResource().
+0

ottima risposta, ben studiata con link utili. Vorrei poter sopravvivere più di una volta. – bonsaiviking

2

Anche se è ammissibile per gli standard HTML, JRE in genere non capiscono i dati codificati base64.