3

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する のインスタンスとしてを持つことです。GameControlGameControl

これどうやってするの?

編集@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)。

4

2 に答える 2

6

のインスタンスのみを公開しましたGameControl。他のメソッドを公開する場合は、それらも公開する必要があります。例えば:

 public native void expose()/*-{
        var control = this.@game.client.GameEntryPoint::_gameControl;   
        var gameInstance = {
            gameControl: control,
            isEmpty:function(param){
              control.@game.client.GameEntryPoint::isEmpty(*)(param);   
            }  

        }


        $wnd.game = gameInstance;
    }-*/;

また、 gwt-exporterと呼ばれるフレームワークがあり、それはあなたにとって物事をより簡単にするかもしれません

于 2012-04-05T13:46:04.773 に答える
1

これが役立つ場合があります。

http://code.google.com/p/gwtchismes/wiki/Tutorial_ExportingGwtLibrariesToJavascript_en

于 2012-04-05T15:37:14.387 に答える