尝试对旧版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
该如何解决?
答案 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)。