如何在纯Java环境中处理JSNI方法

How are JSNI methods handled in a pure Java environment?

本文关键字:处理 JSNI 方法 环境 Java      更新时间:2024-06-14

我使用以下GWT JSNI代码,该代码应在服务器和客户端使用的共享包中使用:

public static native void alert(String msg) /*-{
  $wnd.alert(msg);
}-*/;

public void doSomething() {
   alert("test");
}

当编译器编译成纯Java时,它在服务器上对这些代码做什么?有什么方法可以提供纯Java版本的代码来替代JSNI部分吗

从JVM的角度来看,它们是native方法
/*-{ … }-*/是特定于GWT的语法,从Java编译器的角度来看,它只是一个注释。

因此,如果在JVM中调用,它将以UnsatisfiedLinkError失败。

如果您想为GWT与JVM提供特定的实现,如果JVM特定的代码可以翻译为GWT,则可以使用GWT.isScript()(您可以尝试用@GwtIncompatible对其进行注释,看看GWT是否会抱怨),或者可以使用超级源;请参阅中的"用另一个包实现覆盖一个包"http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml