1

我需要从 Javascript 调用 Java 方法。所以我定义了方法:

private native void registerMethod() /*-{
    var self = this;
    $wnd.test = function(longParam) {
        self.@mypackage.HomeView::test(Ljava/lang/Long;)(longParam);
    };
}-*/;

Java方法:

private void test(Long longParam) {
    GWT.log("Call to test with longParam =  " + longParam);
}

JS调用:

public static native void paypalClose() /*-{
    $wnd.alert(top.test);
    top.test(10);
    top.dgFlow.closeFlow();
    top.close();
}-*/;

警报显示 Javascript 函数定义。如果我打电话top.test(),它可以工作,但没有传递任何参数。但是,如果我打电话top.test(10),我会得到一个空警报窗口。

4

1 回答 1

4

您的方法除外 a java.lang.Long,而不是 a long,因此您必须创建Long. 您可以使用@java.lang.Long::newor @java.lang.Long::valueOf,但您不能long在 JSNI 中使用 s :https ://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#important

因为 JavaScript 数字与 Java 严格等价double,所以应该使用doubleorjava.lang.Double作为参数。一旦进入 Java 世界,您可以根据需要将 double 类型转换为 long,但不能来自/在 JSNI 中。

于 2012-05-17T18:54:42.647 回答