我使用以下GWT JSNI code,它应该在服务器和客户端使用的共享打包中使用:
public static native void alert(String msg) /*-{
$wnd.alert(msg);
}-*/;
public void doSomething() {
alert("test");
}
当编译为纯Java时,编译器对服务器上的代码做了什么?有没有办法提供纯Java版本的代码替代JSNI部分?
答案 0 :(得分:1)
从JVM的角度来看,它们是native
methods
/*-{ … }-*/
是一种特定于GWT的语法,从Java编译器的角度来看它只是一个注释。
因此,如果在JVM中调用,它将失败并显示UnsatisfiedLinkError
。
如果要为GWT和JVM提供特定实现,如果特定于JVM的代码可以转换为GWT,则使用GWT.isScript()
(您可以尝试使用@GwtIncompatible
进行注释,并查看是否有GWT抱怨),或者你可以使用超级来源;请参阅http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml