GWT中的JSNI在调用时会导致java.lang.unsatifiedLinkError

GWT中的JSNI在调用时会导致java.lang.unsatifiedLinkError,java,gwt,jsni,Java,Gwt,Jsni,尝试为遗留GWT项目提供内置JSNI支持。我添加了简单的JSNI警报函数,该函数是从button的onclick处理程序调用的- public static native void JSAlert(String msg) /*-{ $wnd.alert(msg); }-*/; public class JSNITestCommandHandler extends AbstractEventListener<JSNITestCommand> { @Override publ

尝试为遗留GWT项目提供内置JSNI支持。我添加了简单的JSNI警报函数,该函数是从button的onclick处理程序调用的-

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

public class JSNITestCommandHandler extends AbstractEventListener<JSNITestCommand> {

  @Override
  public void execute(JSNITestCommand event) {
    JSAlert("TEST JS ALERT");
  }
}
public静态本机void JSAlert(字符串msg)
/*-{
$wnd.alert(msg);
}-*/;
公共类JSNITestCommandHandler扩展了AbstractEventListener{
@凌驾
public void execute(JSNITestCommand事件){
JSAlert(“测试JS警报”);
}
}
当我点击浏览器中的按钮时,它会显示“正在执行…”大约10秒钟,然后出现错误消息-

-------------出了点问题------------------ com.gotapi.hcsapplication.client.XLcmApplicationClient.JSAlert(Ljava/lang/String;)V

java.lang.unsatifiedlinkerror:com.gotapi.hcsapplication.client.XLcmApplicationClient.JSAlert(Ljava/lang/String;)V


如何解决此问题?

此错误表示您正试图从普通JVM中运行仅GWT的代码(即,不是传统的“开发模式”,也不是通过在浏览器中实际执行代码)。具体来说,JSNI或JsInterop
native
调用不能在JVM中运行

GWT允许您编译Java以在浏览器中运行,而不是让您在JVM中运行JS。旧的JSNI代码或新的JsInterop是如何编写Java来描述浏览器中发生的事情,Java无法理解。它不能在普通JVM中运行


要运行单元测试,请使用GWTTestCase作为测试的超类,并使用gradle/maven GWT插件调用测试。这将使GWT能够将Java编译成JS,然后在您配置的任何浏览器中运行它(包括JSNI)。

Colin,谢谢!我正在处理的遗留代码在JVM代码中有其处理程序。在JVM中运行的服务器GWT代码和在浏览器中运行的客户端GWT代码之间是否存在任何连接?我相信我可以从第二部分调用JSNI代码。