我正在尝试从java方法获取返回的值,但它返回一些非常奇怪的东西:它返回我用javascript编写的方法本身。
这里是java方法的代码:
public String getNameToShow() {
return "Chart number 1";
}
和javascript方法:
public native void drawJSChart(String divId, int a, String jsData) /*-{
try {
//First create a script where to paste the jsData
var scriptID = this.@myPackage.MyClass::getNameToShow();
console.log(scriptID);
//Some code
} catch (e) {
console.error(e.message);
}
}-*/;
谢谢。
答案 0 :(得分:5)
它返回js方法,因为你已经要求使用js方法。
从JSNI代码调用java方法应该如下所示:
var scriptID = this.@myPackage.MyClass::getNameToShow(*)(); //notice second pair of braces
基本上要从JSNI调用java方法,您需要放置两对大括号。首先定义方法参数类型(在我的示例中,我使用*
,因此它将匹配任何参数类型),第二个用于将参数传递给方法。
答案 1 :(得分:1)
您还必须传递Java函数的类型。写这样的作品:
package XXXXX.client;
import com.google.gwt.core.client.EntryPoint;
class _24_TestJSNIMethodCallback implements EntryPoint {
public void onModuleLoad() {
drawJSChart();
}
public String getNameToShow() {
return "Chart number 1";
}
public native void drawJSChart() /*-{
try {
//First create a script where to paste the jsData
var scriptID = this
.@XXXXX.client._24_TestJSNIMethodCallback::getNameToShow()();
$wnd.alert(scriptID);
//Some code
} catch (e) {
console.error(e.message);
}
}-*/;
}