java - 从 JSNI 调用 Java 方法

标签 java javascript gwt jsni

我想从 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/

相关文章:

Collection<Foo>[] 是必要和/或有效的 Java 语法场景

JavaScript 函数原型(prototype)?

javascript - 仅适用于内部 Div 的属性

java - 将宏图转换为 gwt

java - 未发送订阅者的 Firebase 指数退避

java - 从具有循环依赖性的命令行编译

java - 关于 StringBuffer 和 StringBuilder 中的方法没有被重写?

javascript - 如何访问 UI-SELECT 下拉值 [AngularJS 1.4.7]

java - 如何在ext gwt中实现ModelData接口(interface)?

eclipse - 使用eclipse在tomcat上调试GWT