0

gwt アプリケーションで module1 と module2 という 2 つのモジュール名を作成しました。数秒後に、module1 から module2 に、module2 から module1 に同時にメッセージを渡したいと思います。次のコードを書きますが、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

2 つの別々のモジュール (*.nocache.js ファイル) を同じ Web ページに含めようとしている場合、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 を使用する場合、プリミティブ型に基づいてメッセージを渡す必要があることに注意してください (ドキュメントを参照)

ところで: JSNI を使用する代わりに、gwtexporter を使用して JS で使用できるメソッドとクラスをエクスポートし、gwtquery を使用して JS メソッドを呼び出したいと思います。

于 2013-06-24T14:33:48.257 に答える