0
 public class A{
    private void javaMethod(int a,int b){}

    private native void init()/*-{
            function OnMouseMove(e) {
             //blow calling doesn't work
              this.@p::javaMethod(Ljava/...teger;Ljava.../Integer;)(intVal,intVal);
            }
    }-*/;
  }

如上所述,如何使调用工作?

4

2 回答 2

1

你做错了两件事:

  • 您没有在@p, 之后定义类名(假设@p实际上只是真实包名的缩短版本);

  • 你试图通过java.lang.Integer代替int. 您应该说(II)是类型,如此所述。

您的代码应该看起来更像这样:

package com.my.package;

public class ClassA {
    private static void javaMethod(int a, int b) { ... }
    public static native void init() /*-{
       $wnd.javaMethod = function(a, b) {
          return @com.my.package.ClassA::javaMethod(II)(a,b);
       }
       function OnMouseMove(e) {
          $wnd.javaMethod(a,b);
       }
    }-*/;
}
于 2011-12-12T03:29:28.633 回答
1

在谷歌组上回答:https ://groups.google.com/d/msg/google-web-toolkit/qE2-L4u_t4s/YqjOu-bUfsAJ

复制在这里以供参考和方便:

首先,intis not java.lang.Integer,所以你在 JSNI 中的方法签名是错误的;它应该是javaMethod(II). (我想@p::while javaMethod is defined in class A 在您的问题中过于简化,但在您的代码中是可以的)

您也可能会遇到问题this,这可能不是您认为的那样。一种常见的模式是将当前对象(this, 当时)分配给您将从闭包中引用的变量:

var that = this;
…
function OnMouseMove(e) {
   that.@p.A::javaMethod(II)(intVal, intVal);
}
于 2011-12-12T11:09:30.417 回答