Java で書かれたクラス ライブラリがあり、それを Javascript に変換したいと考えています。すべてのメソッドは非常に単純で、ほとんどがコレクションの操作に関係しています。インスタンス化できる GameControl という 1 つのクラスがあり、そのメソッドをページ上の他の Javascript コードに公開したいと考えています。
私はGWTを使用することを考えました。コンパイルする GWT で実行中のプロジェクトがありますが、GameControl クラスのインスタンス (+ 機能) を公開する方法がわかりません。
JSNI を使用してオブジェクトを公開するとうまくいくはずだと思っていましたが、うまくいきませんでした。これは、現在の外観の短いバージョンです。
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 = this.@game.client.GameEntryPoint::_gameControl;
}-*/;
}
GameControl.java
package game.client;
public class GameControl {
public boolean isEmpty(int id){
// does stuff...
return true;
}
}
したがって、GWT は実際にコードをコンパイルし、GameControl_0
ビルドされて に設定されているオブジェクトがあることがわかりますが、メソッドは見つかり$wnd.game
ません。isEmpty()
私の予想される最終結果は、すべてのパブリック メソッドが公開window.game
する のインスタンスとしてを持つことです。GameControl
GameControl
これどうやってするの?
編集@jusio
の返信によると、JSNI を使用してプロパティを公開
するwindow
と明示的に機能しましたが、冗長すぎました。gwt-exporter ソリューションを試しています。今私が持っています
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;
}
}
しかし、まだコードはエクスポートされていません (具体的には ではありませんRoadServer
)。