JSNI в GWT делает java.lang.UnsatisfiedLinkError при вызове - PullRequest
0 голосов
/ 01 февраля 2019

Попытка встроить поддержку JSNI в унаследованный проект GWT.Я добавил простую функцию оповещения JSNI, которая вызывается из обработчика нажатия кнопки -

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 голосов
/ 01 февраля 2019

Эта ошибка указывает на то, что вы пытаетесь запустить код только для GWT из обычной JVM (т. Е. Не в устаревшем «режиме dev» или путем фактического выполнения кода в браузере).В частности, вызовы JSNI или JsInterop native не могут быть запущены в JVM.

GWT создан для того, чтобы позволить вам скомпилировать Java для запуска в браузере, а не запускать JS в JVM.Старый код JSNI или новый JsInterop - это то, как вы пишете Java для описания того, что произойдет в браузере, вне того, что может понять Java.Он не может быть запущен в обычной JVM.

Для запуска модульных тестов используйте GWTTestCase в качестве суперкласса вашего теста и используйте плагин gradle / maven GWT для его запуска.Это позволит GWT скомпилировать вашу Java в JS, а затем запустить все это (включая JSNI) в любом браузере, который вы настраиваете.

...