GWT中的JSNI在调用时会产生java.lang.UnsatisfiedLinkError

时间:2019-02-01 03:29:35

标签: java gwt jsni

尝试对旧版GWT项目内置JSNI支持。我添加了简单的JSNI警报功能,该功能从按钮的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");
  }
}

当我单击浏览器中的按钮时,它显示“正在执行...”大约10秒钟,然后出现错误消息-

-------------有些东西出错了------------- com.gotapi.hcsapplication.client.XLcmApplicationClient.JSAlert(Ljava / lang / String;)V

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

该如何解决?

1 个答案:

答案 0 :(得分:0)

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

通过GWT可以编译Java以使其在浏览器中运行,而不是让Java在JVM中运行。旧的JSNI代码或新的JsInterop是您编写Java的方式,以描述Java不能理解的浏览器中将发生的事情。它不能在普通的JVM中运行。

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