尝试为遗留 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");
}
}
Run Code Online (Sandbox Code Playgroud)
当我点击浏览器中的按钮时,它显示“正在执行...”大约10秒,然后出现错误消息 -
------------- 出了问题 ------------- com.gotapi.hcsapplication.client.XLcmApplicationClient.JSAlert(Ljava/lang/String;)V
java.lang.UnsatisfiedLinkError: com.gotapi.hcsapplication.client.XLcmApplicationClient.JSAlert(Ljava/lang/String;)V
该怎么做才能解决这个问题?
此错误表明您正在尝试从普通 JVM 中运行仅 GWT 的代码(即不是传统的“开发模式”,或者通过在浏览器中实际执行代码)。具体来说,JSNI 或 JsInteropnative调用不能在 JVM 中运行。
GWT 的目的是让你编译 Java 以在浏览器中运行,而不是让你在 JVM 中运行 JS。旧的 JSNI 代码或新的 JsInterop 是您编写 Java 来描述浏览器中将发生的事情的方式,超出了 Java 可以理解的范围。它不能在普通的 JVM 中运行。
要运行单元测试,请使用 GWTTestCase 作为测试的超类,并使用 gradle/maven GWT 插件来调用测试。这将使 GWT 将您的 Java 编译为 JS,然后在您配置的任何浏览器中运行它(包括 JSNI)。
| 归档时间: |
|
| 查看次数: |
659 次 |
| 最近记录: |