我想从 JSNI 变量 successHandler()
调用 Java 方法 test()
。但是,我得到错误
[ERROR] - Line 110: Missing qualifier on instance method 'com.gw.myProject.client.presenter.payments.PaymentProgramPresenter.test'
原代码:
public static native void purchase(String token) /*-{
var successHandler = function(status){ // Success handler
return @com.gw.myProject.client.presenter.payments.PaymentProgramPresenter::test()();
}
var failureHandler = function(status){ // Failure handler
// $wnd.alert('testing');
}
$doc.purchaseAction(token, successHandler, failureHandler);
}-*/;
public void test() {
this.onHide();
}
最佳答案
您的test()
不是静态的。因此,您需要将其设为静态或指定一个实例或将购买设为非静态。
(此错误是“无法从类型 TypeName 对非静态方法 methodName() 进行静态引用
”的 GWT 版本)
public native void purchase(String token) /*-{
var instance = this;
var successHandler = function(status){ // Success handler
return instance.@com.gw.myProject.client.presenter.payments.PaymentProgramPresenter::test()();
}
var failureHandler = function(status){ // Failure handler
// $wnd.alert('testing');
}
$doc.purchaseAction(token, successHandler, failureHandler);
}-*/;
public void test() {
this.onHide();
}
您可以在 gwtproject.org 找到真正好的教程
还有一个提示。如果您在 JSNI 中创建 javascript 回调,请使用 en $entry()-function 将它们包装起来:
$doc.purchaseAction(token,$entry( successHandler ), $entry( failureHandler));
这将启用 GWT uncaughtExceptionHandler
关于java - 从 JSNI 调用 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914854/