Pergunta

Eu sou provavelmente faltando algo simples aqui, mas não consigo encontrar a resposta em outro lugar. Eu só quero exibir um applet no meu código GWT.

OS: Windows XP Java: JDK 1.6.0_10 Outros: GWT, GWT-Ext 2.0.5

Aqui está o applet (obviamente simplificado para testes):

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

Aqui está o código chamando-o:


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 eu iniciar o aplicativo no modo hospedado, as falhas de JVM (incidente 1.425.130 arquivados Sun).

Quando tento compilar o código GWT para execução em um navegador, fico com esta:

        [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 eu estou faltando alguma biblioteca applet, mas eu grepped através de todos os frascos no JDK e tentou incluindo todos os que lista JApplet ou AWT (plugin.jar, resources.jar, rt.jar, deploy .jar, javaws.jar).

Além disso, eu tenho certeza que uma vez que eu resolver este problema há outro à espreita logo depois, mas vou guardar isso para outra questão.

Obrigado!


O aplicativo legado não é um applet - é uma aplicação Swing grosso-cliente. Nós hackeado que ele seja executado como um applet porque nossos clientes querem um cliente navegador e este é o caminho mais rápido para obter esse feito.

Eu não sei se GWT aceitaria a solução JPanel - o app não está escrito em qualquer forma que GWT pode analisar - ou seja, ele não está usando a API do GWT, ele está usando a API Swing. AFAIK, a única maneira de misturar balanço com GWT seria de uma forma applet.

Estou faltando alguma coisa?

Foi útil?

Solução

Você está tentando GWT-compilar seu applet?

Este não irá funcionar, como compilação GWT (que é apenas a tradução de Java para Javascript) suporta apenas um punhado de bibliotecas Java e certamente não applets.

Certifique-se de que a sua aplicação não está no caminho de origem GWT (movê-lo para outro pacote).

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

Outras dicas

Não use o GWTCompiler para compilar o código applet. Eu recomendaria a criação de um segundo módulo (ou projeto) que contém apenas o código applet. Compilar a um JAR separado usando o compilador javac padrão (ou seu IDE / ant) ??

O GWTCompiler utiliza um subconjunto das bibliotecas Java, e só deve ser usado para gerar o código que vai eventualmente ficar como Javascript.

O Google encontrou este . Uma das respostas diz:.. "O cartaz anterior é as coisas direito, o shell não pode manipular incorporados como Flash ou Applets Existem algumas restrições no componente SWT usada para executar o dentro do navegador do shell um relatório de bug tem sido associada com esse problema, você pode querer manter um olho nele para futuras atualizações. "

Parece que ele não pode ser feito.

Eu encontrei este durante a pesquisa para um aplicativo gwt, e mesmo que esta é uma discussão antiga pensei que eu ia postar um método para executar um miniaplicativo dentro do GWT.

Primeiro, crie dois projetos distintos, um para a sua aplicação e outro para gwt. fazer a sua aplicação como normal.

jar seu applet.

, em seguida, assinar o seu .jar com jarsigner.

criar seus módulos gwt como normal.

para incorporar o applet eu uso um objeto gwt HTML com uma marca applet como esta:

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

Basta adicionar o código HTML widget para um ContentPanel ea parte gui é feito.

O .jar applet precisa ir na guerra / para o seu projeto GWT.

Junto com o .jar você terá que escrever um arquivo .jnlp para iniciar o applet.

Este irá incorporar um applet no GWT e executá-lo no modo hospedado ou produção. A chave é a assinar o seu .JAR e lançá-lo com .JNLP

Um aplicativo light-heavyweight pode misturar GWT e JNLP. Então poderíamos obter os maiores potes nas máquinas das pessoas, em vez de forma transparente. Como exemplo, eu gostaria de usar o kit de ferramentas Batik ou outras guloseimas relacionadas com o SVG ter SVG em meu aplicativo GWT, em vez de serem obrigados a usar somente png ou outros formatos raster.

  • Tyro - você também pode enviar seus pensamentos sobre isso comigo em bob.futrelle@gmail.com

"O javax.swing de importação não pode ser resolvido" - desculpe, eu não sou um perito do GWT, mas este erro é classpath-esque. Soa como GWT não pode encontrar o rt.jar para o seu JVM.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top