Pregunta

Probablemente me estoy perdiendo algo simple aquí, pero no puedo encontrar la respuesta en otro lado. Solo quiero mostrar un applet en mi código GWT.

SO: Windows XP Java: JDK 1.6.0_10 Otros: GWT, GWT-Ext 2.0.5

Aquí está el applet (obviamente simplificado para la prueba):

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);
    }
}

Aquí está el código que lo llama:


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);
}

}

Cuando inicio la aplicación en modo alojado, el jvm se bloquea (incidente presentado 1425130 con Sun).

Cuando intento compilar el código GWT para ejecutarlo en un navegador, obtengo esto:

        [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

Obviamente me falta alguna biblioteca de applets, pero he revisado todos los frascos en el jdk e intenté incluir todos los que enumeran JApplet o awt (plugin.jar, resources.jar, rt.jar, deploy .jar, javaws.jar).

Además, estoy bastante seguro de que una vez que resuelva este problema, hay otro acechando justo después, pero lo guardaré para otra pregunta.

¡Gracias!


La aplicación heredada no es un applet, es una aplicación Swing de cliente pesado. Lo hemos pirateado para que se ejecute como un applet porque nuestros clientes quieren un cliente de navegador y esta es la forma más rápida de hacerlo.

No sé si GWT aceptaría la solución JPanel: la aplicación no está escrita de ninguna manera que GWT pueda analizar, es decir, no está utilizando la API GWT, está utilizando la API Swing. AFAIK, la única forma de mezclar Swing con GWT sería en un applet.

¿Me estoy perdiendo algo?

¿Fue útil?

Solución

¿Está intentando compilar GWT su applet?

Esto no funcionará, ya que la compilación GWT (que es solo la traducción de Java a Javascript) solo admite un puñado de bibliotecas de Java y ciertamente no applets.

Asegúrese de que su applet no esté en la ruta de origen GWT (muévalo a otro paquete).

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

Otros consejos

No use el GWTCompiler para compilar su código de applet. Recomendaría crear un segundo módulo (o proyecto) que contenga solo el código del applet. Compile esto en un JAR separado utilizando el compilador Javac estándar (o su IDE / ant) ??

El GWTCompiler usa un subconjunto de las bibliotecas de Java, y solo debe usarse para generar el código que eventualmente se ejecutará como Javascript.

Google encontró esto . Una de las respuestas dice: "El póster anterior es correcto, el shell no puede manejar elementos incrustados como Flash o Applets". Existen algunas restricciones en el componente SWT utilizado para ejecutar el navegador dentro del shell. Se ha asociado un informe de error con este problema, es posible que desee vigilarlo para futuras actualizaciones.

Parece que no se puede hacer.

Encontré esto durante la investigación para una aplicación gwt , y aunque este es un hilo antiguo, pensé que publicaría un método para ejecutar un applet dentro de gwt.

Primero cree dos proyectos distintos, uno para su applet y otro para gwt . haga que su applet sea normal.

jar su applet.

luego FIRME su .jar con jarsigner .

cree sus módulos gwt de manera normal.

para incrustar el applet, uso un objeto HTML gwt con una etiqueta de applet como esta:

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

Simplemente agregue el widget HTML a un panel de contenido y la parte de GUI estará lista.

El applet .jar deberá ir en / war para su proyecto gwt.

Junto con el .jar necesitará escribir un archivo .jnlp para iniciar el applet.

Esto incrustará un applet en gwt y lo ejecutará en modo alojado o de producción. La clave es FIRMAR su .JAR y ejecutarlo con .JNLP

Una aplicación de peso semipesado podría mezclar GWT y JNLP. Entonces podríamos colocar los frascos más grandes en las máquinas de las personas de forma bastante transparente. Como ejemplo, me gustaría usar el kit de herramientas Batik u otros artículos relacionados con SVG para tener SVG en mi aplicación GWT, en lugar de obligarme a usar solo png u otros formatos ráster.

  • Tyro: también puedes enviarme tus pensamientos por correo electrónico a bob.futrelle@gmail.com

" La importación javax.swing no se puede resolver " - Lo siento, no soy un experto GWT, pero este error es de classpath-esque. Parece que GWT no puede encontrar el rt.jar para su JVM.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top