从JSNI调用Java方法

我想从JSNI变量successHandler()调用Java方法test() successHandler() 。 但是,我得到错误

 [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()不是静态的。 因此,您需要将其设置为静态或指定实例或使购买非静态。

(此错误是GWT版本的“ Cannot make a static reference to the non-static method methodName() from the type TypeName ”)

 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() – 函数包装它们:

 $doc.purchaseAction(token,$entry( successHandler ), $entry( failureHandler)); 

这将启用GWT uncaughtExceptionHandler