从JSNI调用Java函数

时间:2013-06-19 02:17:04

标签: java gwt errai

我在使用JSNI调用Java方法时遇到了问题:

public static native void update() /*-{
    this.@app.client.local.MyPage::populate()();
}-*/;

没有错误,只是该方法没有被触发,Java方法populate()在调用时显示警告框,不会触发。

MyPage是一个用@Page

注释的Errai页面

1 个答案:

答案 0 :(得分:3)

我认为您错过了解JSNI中@符号前面的实例的含义。

您正在调用实例populate()的方法this,但您的update()方法是静态的。

您已将populate()定义为静态并以静态方式调用它。

package app.client.local;
class MyPage {

  public static native void update() /*-{
    @app.client.local.MyPage::populate()();
  }-*/;

  public static void populate() {
  }
}

或者您可以将具有该方法作为参数的类的实例传递给您的jsni代码:

package app.client.local;

class MyClass {
  public void populate() {
  }
}

class MyPage {
  public static native void update(MyClass instance) /*-{
    instance.@app.client.local.MyClass::populate()();
  }-*/;
}