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

あなたは2つのことを間違っています:

  • , の後にクラス名を定義していません(実際には、実際のパッケージの名前の短縮版であると@p仮定します);@p

  • java.lang.Integerの代わりに渡そうとしていますinthere で(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

Google グループで回答: https://groups.google.com/d/msg/google-web-toolkit/qE2-L4u_t4s/YqjOu-bUfsAJ

参照と便宜のためにここにコピーします。

まず、intis ではない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 に答える