如何公开在GWT级功能(How to expose class functionality in G

2019-06-23 10:33发布

我用Java编写的类库,并希望将其转换为JavaScript。 所有的方法都非常简单,主要是与处理集合做。 我有这样一个班,GameControl,我可以实例,我想它的方法接触到页面上的其他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-出口解决方案。 我现在有

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 )。

Answer 1:

你已经暴露的唯一实例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出口国 ,它可能使你的东西更容易



Answer 2:

这可能会有帮助。

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



文章来源: How to expose class functionality in GWT