GWT活动:我错过了什么?

Max*_*AMM 1 java events gwt

我试图通过gwt事件总线发送一个对象,我不知道为什么它不起作用.

通常,我有一个创建弹出窗口的组件A. 注册弹出窗口,弹出窗口触发事件.现在,监听器(OtherComponent)与弹出窗口无关.当弹出窗口触发事件时,另一个组件无法捕获它.

这是我的代码:

处理器:

public interface MyEventHandler extends EventHandler {
   public void onChanged(MyEvent event);
}
Run Code Online (Sandbox Code Playgroud)

事件:

public class MyEvent extends GwtEvent<MyEventHandler> {
  private static final GwtEvent.Type<MyEventHandler> TYPE = new GwtEvent.Type<MyHandler>();

  private MyBean my;

  public MaterielEvent(My bean) {
    my = bean;
  }

  @Override
  public com.google.gwt.event.shared.GwtEvent.Type<MyEventHandler> getAssociatedType() {
    return TYPE;
  }

  public static Type<MyEventHandler> getType() {
    return TYPE;
  }

  @Override
  protected void dispatch(MyEventHandler handler) {
    handler.onChanged(this);
  }

  public MyBean getBean() {
    return my;
  }
}
Run Code Online (Sandbox Code Playgroud)

零件 :

public class OtherPanel extends Composite implements HasMyEventHandlers {
  interface OtherPanelUiBinder extends UiBinder<Widget, OtherPanel> {}
  private static OtherPanelUiBinder uiBinder = GWT.create(OtherPanelUiBinder.class);

  public OtherPanel() {
    this.addMyEventHandler(new MyEventHandler() {
       @Override
       public void onChanged(MyEvent event) {
         NotificationManager.success("event recieved");
       }
    });

    initWidget(uiBinder.createAndBindUi(this));
  }

  @Override
  public HandlerRegistration addMyEventHandler(MyEventHandler handler) {
    return addHandler(handler, MyEvent.getType());
  }
}
Run Code Online (Sandbox Code Playgroud)

调用(在另一个组件内):

  fireEvent(new MyEvent(myBean));
Run Code Online (Sandbox Code Playgroud)

永远不会调用通知"收到的事件".

我肯定错过了什么.谢谢你的帮助

Jef*_*len 5

您正在创建EventBus的新实例并在该新实例上定义eventHandler.

我看不出你是如何调用该fireEvent方法(或什么情况下,你在呼唤它的eventBus的),但你需要有一个单一的在你的代码,你绕过定义eventBus实例.

因此,您实例化一个eventBus,然后定义您希望它拥有的任何处理程序,然后让任何与eventBus交互的组件接受"MyEventHandler"作为构造函数的参数.然后,您可以将事件总线的预定义实例传递到该组件,从而允许该组件稍后与您的应用程序具有的单个eventBus进行交互.