Comment exposer la fonctionnalité de classe dans GWT

J'ai une bibliothèque de classes écrite en Java et je veux la convertir en Javascript. Toutes les méthodes sont assez simples et ont principalement trait à la manipulation de collections. J'ai cette classe unique, GameControl, que je pourrais créer une instanciation et je veux que ses méthodes soient exposées à un autre code Javascript sur la page.

Je pensais utiliser GWT. J'ai un projet en cours d'exécution dans GWT qui compile, mais je ne peux pas comprendre comment exposer mon instance (+ fonctionnalité) de la classe GameControl.

Je pensais que l'utilisation de JSNI pour exposer mon objet devrait fonctionner, mais ce n'était pas le cas. Voici la version courte de la façon dont il ressemble maintenant:

GameEntryPoint.java

import com.google.gwt.core.client.EntryPoint; public class GameEntryPoint implements EntryPoint { private GameControl _gameControl; @Override public void onModuleLoad() { _gameControl = new GameControl(); expose(); } public native void expose()/*-{ $wnd.game = [email protected]::_gameControl; }-*/; } 

GameControl.java

 package game.client; public class GameControl { public boolean isEmpty(int id){ // does stuff... return true; } } 

Donc, GWT compile le code, et je vois qu'il existe un objet GameControl_0 cours de construction et mis en $wnd.game , mais aucune méthode isEmpty() n'est trouvée.

Mon résultat final attendu est d'avoir une window.game comme une instance de GameControl avec toutes les méthodes publiques GameControl expose.

Comment puis-je faire ceci?

Modifier Selon la réponse de @jusio, l'utilisation de JSNI pour exposer window propriétés de la window explicitement fonctionnée, mais elle était trop verbose. J'essaie la solution gwt-exportator. Maintenant j'ai

GameEntryPoint.java

 package game.client; import org.timepedia.exporter.client.ExporterUtil; import com.google.gwt.core.client.EntryPoint; public class GameEntryPoint implements EntryPoint { @Override public void onModuleLoad() { ExporterUtil.exportAll(); } } 

RoadServer.java

 package game.client; import org.timepedia.exporter.client.Export; import org.timepedia.exporter.client.ExportPackage; import org.timepedia.exporter.client.Exportable; @ExportPackage("game") @Export("RoadServer") public class RoadServer implements Exportable { int _index; int _id; public RoadServer(int index,int id){ this._id=id; this._index=index; } } 

Mais aucun code n'est exporté (spécifiquement pas RoadServer ).

Vous n'avez exposé que l'instance de GameControl . Si vous souhaitez exposer d'autres méthodes, vous devrez les exposer également. Par exemple:

  public native void expose()/*-{ var control = [email protected]::_gameControl; var gameInstance = { gameControl: control, isEmpty:function(param){ [email protected]::isEmpty(*)(param); } } $wnd.game = gameInstance; }-*/; 

De plus, il existe un cadre appelé gwt-exporter , cela pourrait vous faciliter les choses