2011-12-12 107 views

回答

1

回答關於谷歌組:https://groups.google.com/d/msg/google-web-toolkit/qE2-L4u_t4s/YqjOu-bUfsAJ

複製在這裏以供參考和方便:

首先,intjava.lang.Integer ,所以你在JSNI中的方法簽名是錯誤的;它應該是javaMethod(II)。 (我假設@p::而javaMethod在A級定義的過於簡化你的問題,但是是OK在你的代碼)

您也可能會遇到問題與this,這可能不是你所想它是。一個常見的模式是分配當前對象(this,在時間),你會從你的封引用變量:

var that = this; 
… 
function OnMouseMove(e) { 
    [email protected]::javaMethod(II)(intVal, intVal); 
} 
0

你正在做的兩件事情錯:

  • 你不@p後定義的類名稱,(假設@p實際上只是一個縮短了真正的包名的版本);您正在嘗試通過java.lang.Integer代替int。您應該說(II)作爲類型,如here所述。

你的代碼應該看起來更像是這樣的:

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); 
     } 
    }-*/; 
} 
+0

對不起,我不明白你的code.In我的代碼「的OnMouseMove (e)「位於JSNI方法內,我想從中調用java方法:OnMouseMove(e) –

+0

@AlexLuya添加了更精確的示例。另外,正如Thomas Broyer所指出的那樣,你可能期望「this」不是。 –

相關問題