2012-04-07 3 views
2

Ich möchte Javascript-Code von einem vorhandenen Java-Projekt (original question here) erzeugen.gwt-exporter erzeugt keinen Code (Java zu Javascript)

Ich benutze GWT in Verbindung mit gwt-Exporteur. Nachdem ich GWT kompiliert habe, erscheint keiner meiner Typen in irgendeinem generierten Code.

Ich habe

GameEntryPoint.java

package game.client; 

import org.timepedia.exporter.client.ExporterUtil; 
import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.core.client.JavaScriptObject; 

public class GameEntryPoint implements EntryPoint { 

    @Override 
    public void onModuleLoad() { 
     ExporterUtil.exportAll(); 
    } 

} 

RoadServer.java

package game.client; 

import org.timepedia.exporter.client.Exportable; 

public class RoadServer implements Exportable { 
    int _index; 
    int _id; 
    public RoadServer(int index,int id){ 
     this._id=id; 
     this._index=index; 
    } 
} 

Es gibt keinen Hinweis auf RoadServer überall in meinem war/ Verzeichnis (grep -Ri RoadServer war/* Matches nur die .class Dateien). Außerdem, nur um sicher zu sein, öffnete ich die war/GameEntryPoint.html Datei in meinem Browser (Firefox) und Firebug sieht nur game_GameEntryPoint als etwas, das mit game beginnt.

Irgendeine Idee, warum das nicht funktioniert?

P.S. Ich habe auch versucht, @Export und @Export("RoadServer") mit @ExportPackage("game") zu spezifizieren. Nichts funktioniert.

Antwort

3

Aha, so sieht aus wie es ist ein Bug in ExporterUtil.exportAll(). Wenn die Klasse einen nicht leeren Konstruktor hat oder keine Methoden hat, wird sie nicht exportiert. Aber wenn Sie einen leeren Konstruktor zu der exportierten Klasse hinzufügen und mit Anmerkungen versehen nicht leeren Konstruktor mit @Export Annotation beginnt es funktioniert

Sie können auch manuell eine Klasse exportieren:

public class GameEntryPoint implements EntryPoint { 

    @Override 
    public void onModuleLoad() { 
     ExporterUtil.exportAll(); 
     GWT.create(RoadServer.class); //forcing to export road server 
    } 

} 

aber bewusst sein, dass diese Art und Weise kann manchmal exportieren Sie eine Klasse mit Fehlern

+0

+1 für nette Antwort! – GingerHead

+0

Danke. Ich musste die Annotation "@ Export" sowohl für den Konstruktor als auch für die Klasse hinzufügen, damit dies funktionierte, aber schließlich. Auch hatte ich ein Problem mit Klassen, die Methoden hatten, die ein Array eines benutzerdefinierten Typs zurückgaben. Das Ändern dieser, um ein bestimmtes Array zu füllen, behebt dieses Problem ebenfalls. Es ist schade, dass die Dokumente im gwt-exporter diese Probleme nicht aufführen. – Yuval

+1

Exportierbare Klassen benötigen entweder einen No-Args-Konstruktor oder einen, der ein JavaScriptObject akzeptiert. Es wäre nett, wenn es einen Kompilierzeitfehler oder -warnung gab, wenn es eine Klasse nicht exportieren kann, die Sie @Export aus diesem Grund markiert haben. – funkybro