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