Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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
Java GWT JSNI方法暴露_Java_Javascript_Gwt_Jsni - Fatal编程技术网

Java GWT JSNI方法暴露

Java GWT JSNI方法暴露,java,javascript,gwt,jsni,Java,Javascript,Gwt,Jsni,关于使用JSNI公开我的一个GWT方法,我有一个问题 我试图在我的一个GWT类中公开一个方法,该方法向其他UI组件发出消息 在我的应用程序入口点中,我使用 public native void exportMethods() /*-{ $wnd.fireFoo=$entry(this.@myPackage.class_a::fireFoo(Ljava/lang/String;)); }-*/; 类a更新它的一个字段,然后从类b调用一个静态方法 public c

关于使用JSNI公开我的一个GWT方法,我有一个问题

我试图在我的一个GWT类中公开一个方法,该方法向其他UI组件发出消息

在我的应用程序入口点中,我使用

   public native void exportMethods() /*-{
        $wnd.fireFoo=$entry(this.@myPackage.class_a::fireFoo(Ljava/lang/String;));
   }-*/;
类a更新它的一个字段,然后从类b调用一个静态方法

   public class class_a{

       private String last_msg;

       public void fireFoo(String msg){
           this.last_msg = msg;
           class_b.foo(msg);
       }
   }
类_b调用许多其他类和静态方法来处理消息

   public class class_b{
       public static void foo(String msg){
       ...//creates a message object and sends it to UI components
       class_c.foo2(msg);
       ...
       }

   }
基本上,我所需要做的就是传递一个字符串并调用一个GWT方法。该方法(当从GWT调用而不是从手写JS调用时)工作得非常好。我还验证了exposed方法将触发一个简单的警报。我相信问题在于调用其他类的方法

我得到:“(TypeError)无法获取未定义或空引用描述的属性“hv”


有没有一种方法可以将字符串传递给原始GWT方法,而不必公开它最终将运行的无数其他方法?

就像在JavaScript中一样,
这个@myPackage.class\u a::fireFoo(Ljava/lang/string;)
是对方法的引用,但当时它没有将该方法绑定到
这个
对象。方法内部的
将在调用函数时确定,而不是在检索引用时确定

因此,您需要一名代表:

如果它确实像您所说的那样在DevMode中工作,那么它就是DevMode中的一个bug

var that = this;
$wnd.fireFoo = $entry(function(s) {
  that.@myPackage.class_a::fireFoo(Ljava/lang/String;)(s);
});