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);
}
}-*/;
}
如上所述,如何进行调用工作?
答案 0 :(得分:1)
你做错了两件事:
您没有在@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);
}
}-*/;
}
答案 1 :(得分:1)
谷歌集团回答:https://groups.google.com/d/msg/google-web-toolkit/qE2-L4u_t4s/YqjOu-bUfsAJ
在此复制以供参考和使用:
首先,int
不是java.lang.Integer
,因此您在JSNI中的方法签名是错误的;它应该是javaMethod(II)
。
(我认为@p::
而在A类中定义了javaMethod在你的问题中是过度简化,但在你的代码中是正常的)
您可能也会遇到this
的问题,这可能不是您认为的问题。一种常见的模式是将当前对象(当前this
)分配给您将从闭包中引用的变量:
var that = this;
…
function OnMouseMove(e) {
that.@p.A::javaMethod(II)(intVal, intVal);
}