1

我试图在我的 GWT 应用程序中通过 JSNI 调用运行本机 Java 函数。它看起来像这样:

包 foo.client;

公共类 AAA 实现入口点,UIupdate {

public native void initChangeFunc() /*-{
    $wnd.jsChangeView = function () {

        this.@foo.client.AAA::changeToHistory();
        alert("got here");
    };
}-*/;
public void changeToHistory() {
    Window.alert("Hello World");
    //Change view here.
    this.changeView("history");
    this.changeHistoryView("bydate");
};

...

public void onModuleLoad() {

...

    this.initChangeFunc();
}

}

将 jsChangeView() 函数调用附加到前端的链接 onclick() 并单击它会导致“到达这里”警报,但不会出现“Hello World”警报,并且其他两个函数也没有运行。GWT 不是我的专业领域,这不是我的应用程序,所以我知道我在这里缺少一些基本的东西。有接盘侠吗?

4

1 回答 1

3

this.@foo.client.AAA::changeToHistory()只是引用方法(如果你喜欢,一个“函数指针”,或者,在 JavaScript 中,只是一个“函数”),它不会调用它。您必须写信this.@foo.client.AAA::changeToHistory()()才能真正拨打电话。

当方法有参数时更明显,例如:this.@foo.client.AAA::changeToHistory(Ljava/lang/String;I)vs. this.@foo.client.AAA::changeToHistory(Ljava/lang/String;I)("foo", 3)

于 2011-06-20T21:55:09.437 回答