Domanda

Probabilmente mi manca qualcosa di semplice qui, ma non riesco a trovare la risposta altrove. Voglio solo mostrare un'applet nel mio codice GWT.

Sistema operativo: Windows XP Java: JDK 1.6.0_10 Altro: GWT, GWT-Ext 2.0.5

Ecco l'applet (ovviamente semplificato per i test):

package foo.applet;

import javax.swing.JApplet;
import java.awt.Graphics;

public class HelloApplet extends JApplet 
{
    public void paint(Graphics g) 
    {
        g.drawRect(0, 0, 
                   getSize().width - 1,
                   getSize().height - 1);
        g.drawString("Hello world!", 5, 15);
    }
}

Ecco il codice che lo chiama:


package foo.applet;

import com.google.gwt.user.client.ui.HTML;
import com.gwtext.client.widgets.Panel;


public class AppletPanel extends Panel 
{
public AppletPanel()
{
    HTML applet = new HTML();
    applet.setHTML("<applet name=\"HelloApplet\" code=\"HelloApplet.class\" width=\"300\" height=\"300\"" );
    this.add(applet);
}

}

Quando avvio l'app in modalità ospitata, jvm si arresta in modo anomalo (incidente registrato 1425130 con Sun).

Quando provo a compilare il codice GWT per l'esecuzione in un browser, ottengo questo:

        [ERROR] Errors in 'file:/C:/<blah>/applet/HelloApplet.java'
           [ERROR] Line 3: The import javax.swing cannot be resolved
           [ERROR] Line 4: The import java.awt cannot be resolved
           [ERROR] Line 6: JApplet cannot be resolved to a type
           [ERROR] Line 8: Graphics cannot be resolved to a type
           [ERROR] Line 11: The method getSize() is undefined for the type HelloApplet
           [ERROR] Line 12: The method getSize() is undefined for the type HelloApplet

Ovviamente mi manca qualche libreria di applet, ma ho sfogliato tutti i barattoli nel jdk e ho provato a includere tutti quelli che elencano JApplet o awt (plugin.jar, resources.jar, rt.jar, deploy .jar, javaws.jar).

Inoltre, sono abbastanza sicuro che una volta risolto questo problema ce ne sia un altro in agguato subito dopo, ma lo salverò per un'altra domanda.

Grazie!


L'app legacy non è un'applet: è un'applicazione Swing per client spessi. L'abbiamo hackerato per essere eseguito come applet perché i nostri clienti desiderano un client browser e questo è il modo più veloce per farlo.

Non so se GWT accetterebbe la soluzione JPanel - l'app non è scritta in alcun modo che GWT può analizzare - ovvero non sta usando l'API GWT, sta usando l'API Swing. AFAIK, l'unico modo per mescolare Swing con GWT sarebbe in modo applet.

Mi manca qualcosa?

È stato utile?

Soluzione

Stai provando a compilare GWT la tua applet?

Questo non funzionerà, poiché la compilazione GWT (che è solo traduzione da Java a Javascript) supporta solo una manciata di librerie Java e certamente non applet.

Assicurati che l'applet non si trovi sul percorso di origine GWT (spostalo in un altro pacchetto).

Riferimento: http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t= RefJreEmulation

Altri suggerimenti

Non utilizzare GWTCompiler per compilare il codice dell'applet. Consiglierei di creare un secondo modulo (o progetto) che contenga solo il codice dell'applet. Compilare questo in un JAR separato usando il compilatore Javac standard (o il tuo IDE / formica)

GWTCompiler utilizza un sottoinsieme delle librerie Java e dovrebbe essere usato solo per generare il codice che alla fine verrà eseguito come Javascript.

Google ha trovato this . Una delle risposte dice: "Il poster precedente è giusto, la shell non può gestire cose incorporate come Flash o Applet. Esistono alcune restrizioni nel componente SWT utilizzato per eseguire il browser all'interno della shell. A questo problema è stata associata una segnalazione di bug, ti consigliamo di tenerlo d'occhio per futuri aggiornamenti. & Quot;

Sembra che non possa essere fatto.

L'ho trovato durante la ricerca di un'app gwt e anche se questa è una vecchia discussione pensavo che avrei pubblicato un metodo per eseguire un'applet all'interno di gwt.

Innanzitutto crea due progetti distinti, uno per l'applet e uno per gwt . rendi l'applet normale.

jar the applet.

quindi FIRMA il tuo .jar con jarsigner .

crea i tuoi moduli gwt normalmente.

per incorporare l'applet Uso un oggetto HTML gwt con un tag applet come questo:

(applet MAYSCRIPT code = 'com.myapplet.MyApplet' id = 'myApplet' jnlp_href = '/spplets/MyApplet.jnlp', larghezza = 500, altezza = 400) (/ applet)

Aggiungi semplicemente il widget HTML a contentPanel e la parte gui è terminata.

L'applet .jar dovrà andare in / war per il tuo progetto gwt.

Insieme al .jar sarà necessario scrivere un file .jnlp per avviare l'applet.

Questo incorporerà un'applet in gwt ed eseguirà in modalità ospitata o di produzione. La chiave è FIRMARE il tuo .JAR e avviarlo con .JNLP

Un'app leggera potrebbe mescolare GWT e JNLP. Quindi potremmo mettere i vasetti più grandi sulle macchine delle persone in modo piuttosto trasparente. Ad esempio, vorrei utilizzare il toolkit Batik o altri gadget relativi a SVG per avere SVG nella mia app GWT, piuttosto che essere costretto a usare solo png o altri formati raster.

  • Tyro - puoi anche inviarmi i tuoi pensieri su questo a bob.futrelle@gmail.com

" L'importazione javax.swing non può essere risolta " - scusa, non sono un maven GWT, ma questo errore è classpath-esque. Sembra che GWT non riesca a trovare rt.jar per la tua JVM.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top