Javascript 在GWT上从手写JS获取Java方法返回值

Javascript 在GWT上从手写JS获取Java方法返回值,javascript,gwt,return,jsni,Javascript,Gwt,Return,Jsni,我试图读取Java方法的返回值并将其保存到JS变量中。根据文件,这应该可以完成以下工作: 返回值的本机Java方法: static public double getValue() { return 21.0; } 创建引用以从手写JS调用本机Java: $wnd.showValue=function() { val=$entry(@whateverpackage.thisclass::getValue()); alert("Value: "+val); } 最后,在

我试图读取Java方法的返回值并将其保存到JS变量中。根据文件,这应该可以完成以下工作:

返回值的本机Java方法:

static public double getValue() {
    return 21.0;
}
创建引用以从手写JS调用本机Java:

$wnd.showValue=function() {
    val=$entry(@whateverpackage.thisclass::getValue());
    alert("Value: "+val);
}
最后,在纯JS中:

showValue();
警报框中显示的输出如下:

Value: function(){try{return hh(c,this,arguments)}catch(b){throw b}}

我猜它不是获取返回值,而是获取GWT编译器自己生成的函数,并将其转储到变量上。这有什么不对?正如我所说,在官方文件中有一个非常类似的例子,所以应该是这样。提前感谢。

您必须在函数引用后添加一对额外的括号。第一对包含描述参数类型的函数签名。现在您不是在执行函数,而是将实际函数传递给$entry

所以改变这个

val=$entry(@whateverpackage.thisclass::getValue());
对此

var val = $entry(@whateverpackage.thisclass::getValue()());

顺便说一句,我添加了var关键字以防止任何潜在的范围冲突。

您必须在函数引用之后添加一对额外的括号。第一对包含描述参数类型的函数签名。现在您不是在执行函数,而是将实际函数传递给$entry

所以改变这个

val=$entry(@whateverpackage.thisclass::getValue());
对此

var val = $entry(@whateverpackage.thisclass::getValue()());

顺便说一句,我添加了var关键字以防止任何潜在的范围冲突。

是的,就是这样。非常感谢$entry运行scheduleEntry和scheduleFinally调度命令,更重要的是捕获异常并通过GWT.UncaughtExceptionHandler(如果有)路由它们$entry将函数作为输入并返回函数,因此请像var val=$entry@wateverpackage.thisclass::getValue;注意:,不是,因为它会调用函数,然后只包装其返回值:uselesst这是一个很好的注释,特别是括号部分,看起来很棘手。谢谢@thomas broyer的解释。我已经更新了我的答案。是的,就是这样。非常感谢$entry运行scheduleEntry和scheduleFinally调度命令,更重要的是捕获异常并通过GWT.UncaughtExceptionHandler(如果有)路由它们$entry将函数作为输入并返回函数,因此请像var val=$entry@wateverpackage.thisclass::getValue;注意:,不是,因为它会调用函数,然后只包装其返回值:uselesst这是一个很好的注释,特别是括号部分,看起来很棘手。谢谢@thomas broyer的解释。我已经更新了我的答案。