【问题标题】:GWT problem with calling Java methods from JSNI从 JSNI 调用 Java 方法的 GWT 问题
【发布时间】:2011-01-05 20:54:11
【问题描述】:

我在这个页面上尝试了谷歌的例子: http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=DevGuideJavaFromJavaScript

我希望能够从 JSNI 调用 Java 方法,但没有任何反应。没有错误,但没有调用方法。但是,我可以修改班级中的字段。

这是我试过的代码:

package com.jsni.client;
import com.google.gwt.core.client.EntryPoint;

public class Testjsnii implements EntryPoint {
      String myInstanceField;
      static int myStaticField;

      void instanceFoo(String s) {
          System.out.println(s);
      }

      static void staticFoo(String s) {
          System.out.println(s);
      }

      public native void bar(Testjsnii x, String s) /*-{

        this.@com.jsni.client.Testjsnii::instanceFoo(Ljava/lang/String;)(s);
        x.@com.jsni.client.Testjsnii::instanceFoo(Ljava/lang/String;)(s);
        @com.jsni.client.Testjsnii::staticFoo(Ljava/lang/String;)(s);
        var val = this.@com.jsni.client.Testjsnii::myInstanceField;
      }-*/;

    public void onModuleLoad() {
        bar(this,"Hello");
    }
}

它在控制台上什么也不打印,只打印一条警告:

[WARN] [testjsnii] - JSNI 方法 '@com.jsni.client.Testjsnii::bar(Lcom/jsni/client/Testjsnii;Ljava/lang/String;)' 返回 > JavaScript object(1) 类型的值,但被声明为 void;它根本不应该返回 > 值

我想知道是什么问题。

感谢您的帮助。

【问题讨论】:

  • 您可能看不到 System.out 的输出 - 尝试使用 GWT.log() 来查看是否正在调用这些方法。
  • 我只是直接复制了你的代码,只修改了包和 System.out 到 logger.info() 并且它工作得很好,我什至没有收到你提到的警告信息。

标签: gwt


【解决方案1】:

您实际上遇到了 GWT DevMode 插件的 Chrome (10-dev) 问题:http://code.google.com/p/google-web-toolkit/issues/detail?id=5778

【讨论】:

  • 该错误现已在 Chrome 10.0.634 及更高版本中修复。
猜你喜欢
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多