0

我在 gwt 应用程序中创建了两个模块名称 module1 和 module2。我想在几秒钟后同时将消息从模块 1 传递到模块 2 和模块 2 到模块 1。我编写了以下代码,但它给了我错误,无法在类路径中找到 module1.gwt.xml。

        public void onModuleLoad() {
                mainBus.fireEvent(new PingEvent("-----Simulation Started-----"));
        }

        module1

        public void onModuleLoad() 
            {
                GWTEventBus.mainBus.addHandler(PingEvent.TYPE, new PingEventHandler(){
                    public void onEvent(PingEvent event) {
                        System.out.print("Inside Ping --> ");
                        new Timer(){
                            public void run() {
                                GWTEventBus.mainBus.fireEvent(new PongEvent("Pong fired..."));
                            }
                        }.schedule(1000);
                    }
                });


            }
        module2
        public void onModuleLoad() 
            {
                //final SimpleEventBus mainBus = new SimpleEventBus();
                GWTEventBus.mainBus.addHandler(PongEvent.TYPE, new PongEventHandler(){
                    public void onEvent(PongEvent event) {
                        System.out.print("Inside Pong1 --> ");
                        new Timer(){
                            public void run() {
                                GWTEventBus.mainBus.fireEvent(new PingEvent("Ping fired..."));
                            }
                        }.schedule(1000);
                    }
                });


            }

    plz help me.
4

2 回答 2

2

如果您试图在同一个网页中包含两个独立的模块(*.nocache.js 文件),则除非您使用 JS,否则您无法传递消息。

使用 JSNI 从 module1 导出一些方法,以便在 javascript 中可用,然后也使用 JSNI 从 module2 调用此方法。

package my.package.module1;
public class MyClass1 implements EntryPoint {
  public void onModuleLoad() {
    exportMyJavaMethod();
  }
  public static String myJavaMethod(String message) {
    // Do whatever with the message received (create an event, etc.)
    return "Hello " + message;
  }
  private native static exportMyJavaMethod() /*-{
    $wnd.myJavaMethod = @my.package.module1.MyClass1::myJavaMethod;
  }-*/;
}


package my.package.module2;
public class MyClass2 implements EntryPoint {
  public void onModuleLoad() {
    String ret = callMyJavaMethod("foo");
  }
  private native static callMyJavaMethod(String s) /*-{
    return $wnd.myJavaMethod(s);
  }-*/;
}

请注意,使用 JSNI,您必须根据原始类型传递消息(请参阅文档

顺便说一句:我宁愿使用 gwtexporter 来导出我希望在 JS 中可用的方法和类,并使用 gwtquery 来调用 JS 方法而不是使用 JSNI。

于 2013-06-24T14:33:48.257 回答
0

您的应用程序只能有一个入口点,但您可以让您的主模块继承多个其他 gwt 应用程序。我建议研究模块继承。您可以在 .gwt.xml 文件中继承一个模块,该模块将被加载,并且其 onModuleLoad 方法将被自动调用。

https://developers.google.com/web-toolkit/doc/latest/DevGuideOrganizingProjects#DevGuideModules

于 2013-06-24T17:19:30.797 回答