私はJavaで書かれたクラスライブラリを持っており、Javascriptに変換したいと思っています。すべてのメソッドはかなりシンプルで、主にコレクションの操作と関係しています。私はこの1つのクラス、GameControlをインスタンス化することができ、そのメソッドをページ上の他のJavaScriptコードに公開したいと思います。GWTのクラス機能を公開するには
私は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 = [email protected]::_gameControl;
}-*/;
}
GameControl.javaは
package game.client;
public class GameControl {
public boolean isEmpty(int id){
// does stuff...
return true;
}
}
ので、GWTは確かにコードをコンパイルし、私は、$wnd.game
に組み込まれているGameControl_0
オブジェクトがあることを知っていますが、見つけられる方法はありません。isEmpty()
私の最終的な結果はのインスタンスとしてwindow.game
となり、すべての公開メソッドGameControl
が公開されています。
どうすればいいですか? window
プロパティを公開するJSNIを使って@jusio
の回答を1として
編集 は、明示的に働いていたが、それはあまりにも冗長でした。私は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
)エクスポートされません。
申し訳ありませんが受け入れ中です。最初の解決策は機能しましたが、実際は非常に冗長です。私はgwt-exporterが働くようには思えない。私はそれを外部JARとしてプロジェクトに追加し、 'GameEntryPoint' XMLモジュールファイルを' org.timepedia.exporter.Exporter'から継承するように修正し、 'export'値を' yes'に設定し、最後に '私のプロジェクトのすべてのクラスにエクスポート可能なインターフェイスがありますが、まだGWTコンパイルはコードを生成しません。私は '@ Export'アノテーションをいくつか追加しようとしました。私が何をするかも知っていますか? – Yuval
@Yuvalまた、あなたがエントリーポイントのどこかでExporterUtil.exportAll();を呼び出さなければならないので、フレームワークはクラスを実際に公開します。 – jusio
これを追加しても何も変わりません。おそらくgwt-exporterは私のコードを処理している間にエラーに陥っていますか?それが働いている間、gwt-exporterが働くのを見る方法はありますか? – Yuval