2013-06-24 1 views
0

gwt 응용 프로그램에 module1과 module2라는 두 개의 모듈 이름을 만들었습니다. 몇 초 후에 module1에서 module2로, module2에서 module1로 메시지를 동시에 전달하고 싶습니다. 다음 코드를 작성했지만 classpath에 module1.gwt.xml을 찾을 수 없다는 오류가 발생합니다. 당신이 동일한 웹 페이지에 포함 (* 파일을 .nocache.js)이 개 분리 된 모듈을하려는 경우 당신이 JS를 사용하지 않는GWT에서 두 모듈을 통신하는 방법

 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. 

답변

2

, 당신은 메시지를 전달할 수 없습니다.

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를 사용하여, 당신은 기본 유형에 따라 메시지를 전달해야한다는 BTW

(documentation 참조) : 차라리 내가 JS에서 사용할 원하는 수출 방법 및 클래스에 gwtexporter 사용하는 것, 그리고 gwtquery JSNI를 사용하는 대신 JS 메소드를 호출한다.

0

귀하의 앱은 하나의 진입 점만 가질 수 있지만 메인 모듈에 여러 다른 gwt 응용 프로그램을 상속시킬 수 있습니다. 나는 모듈 상속을 살펴볼 것을 제안한다. .gwt.xml 파일에서 모듈을 상속 할 수 있으며 해당 모듈이로드되고 onModuleLoad 메서드가 자동으로 호출됩니다.

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

+1

은'하나의 항목 point'을 가질 수 있습니다 앱은 완전히 사실이 아니다, 당신은 응용 프로그램에서 여러 엔트리 포인트를 가질 수있다. –

+0

문서를 다시 살펴본 후에 여러 개의 진입 점을 실제로 사용할 수 있습니다. – aglassman

+0

이 답변은 올바르지 않기 때문에 삭제해야합니다 ... – snorbi

관련 문제