Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT-如何从手写JavaScript调用实例Java方法?_Gwt - Fatal编程技术网

GWT-如何从手写JavaScript调用实例Java方法?

GWT-如何从手写JavaScript调用实例Java方法?,gwt,Gwt,我需要从手写Javascript调用一个实例Java方法。在GWT文档中,解释了如何使用静态方法和类执行此操作,并且效果良好: (从手写JavaScript调用Java方法) 有可能这样做吗?我尝试了几种不同的组合,声明了本机方法并使用了。@和实例。@但没有成功 谢谢您能发布不起作用的代码吗?:) 但在我看来,this.@将不起作用,因为您没有该类的对象(也就是说,在手写JS中),这与您调用一个类的实例方法而不首先创建该类的对象是一样的 instance.@应该可以工作,但是您必须确保实例在从手

我需要从手写Javascript调用一个实例Java方法。在GWT文档中,解释了如何使用静态方法和类执行此操作,并且效果良好:

(从手写JavaScript调用Java方法)

有可能这样做吗?我尝试了几种不同的组合,声明了本机方法并使用了。@和实例。@但没有成功


谢谢

您能发布不起作用的代码吗?:)

但在我看来,
this.@
将不起作用,因为您没有该类的对象(也就是说,在手写JS中),这与您调用一个类的实例方法而不首先创建该类的对象是一样的


instance.@
应该可以工作,但是您必须确保
实例
在从手写JS调用函数时指向类的有效实例。

确保可以这样做,但语法错误。我没有编译就输入了这个,所以我可能会有一些输入错误。但我就是这样做的。您的方法不起作用的原因是,此变量的大小与您预期的不同

public MyUtilityClass{    
  public static int computeLoanInterest(int amt, float interestRate, int term)  { ... }    

  public static native void exportStaticMethod() /*-{       
      var _this = this;
      $wnd.computeLoanInterest = function(amt,interestRate,term) {
          _this.@mypackage.MyUtilityClass::computeLoanInterest(IFI)(amt,interestRate,term);    
      };
  }-*/;
}

David Nouls的答案有效,但有一处更正:

从方法声明中删除static关键字。

我意识到这很旧,但我很难让它工作,因为David Nouls的答案对我来说并不完整。为了让initComplete()调用我的实例方法initComplete(),我不得不对其进行这样的调整

在构造MyComponent时,我将其传递给了静态方法。然后,全局initComplete方法正确地调用了实例方法


我希望这对其他GWT新手有所帮助。

请注意,还有一个名为GwtExporter的项目,它可以删除JSNI调用所需的笔迹。我还没有用过它,但是这个想法很有趣。如何将这个-->(上下文、元素父级、字符串值、NativeEvent事件、ValueUpdater ValueUpdater)从javascript传递到gwt java代码这些方法不应该是静态的。这真的是答案吗??这很奇怪,因为我看到这些方法仍然是静态的。这是如何解决您的问题的@Chinesco?
public MyUtilityClass{    
  public static int computeLoanInterest(int amt, float interestRate, int term)  { ... }    

  public static native void exportStaticMethod() /*-{       
      var _this = this;
      $wnd.computeLoanInterest = function(amt,interestRate,term) {
          _this.@mypackage.MyUtilityClass::computeLoanInterest(IFI)(amt,interestRate,term);    
      };
  }-*/;
}
public static native void exportInitCallback(MyComponent thiz) /*-{
    $wnd.initComplete = function (){
        thiz.@my.package.client.MyComponent::initComplete()();
    }

}-*/;