import org.zkoss.zk.ui.DesktopUnavailableException; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.EventQueue; import org.zkoss.zk.ui.event.EventQueues; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Label; import org.zkoss.zul.Window; public class ListenEventController extends GenericForwardComposer { private static final long serialVersionUID = 6923289219026421622L; private Label eventData; private MyButtonBar buttonBar; private EventListener listener = new EventListener() { @Override public void onEvent(Event event) throws Exception { doRefresh("" + event.getData()); } }; @Override public void doAfterCompose(Window comp) throws Exception { super.doAfterCompose(comp); initEventQueues(); } private void initEventQueues() { // getEventQueue().subscribe(listener, true); getEventQueue().subscribe(new EventListener() { @Override public void onEvent(Event event) throws Exception { System.out.println("event thread"); } }, listener); } private void doRefresh(String data) { if (desktop != null && self != null) { try { Executions.activate(desktop); eventData.setValue(data); buttonBar.refreshButtons(); Executions.deactivate(desktop); } catch (DesktopUnavailableException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } else { getEventQueue().unsubscribe(listener); } } private EventQueue getEventQueue() { return EventQueues.lookup("BUG_TEST_QUEUE", EventQueues.SESSION, true); } }