package org.zkoss.zktest.test2; import org.zkoss.zk.ui.Desktop; 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.select.SelectorComposer; import org.zkoss.zk.ui.select.annotation.Listen; import org.zkoss.zk.ui.select.annotation.Wire; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zul.Label; import org.zkoss.zul.Vbox; import org.zkoss.zul.Window; /** * @author Vincent * */ public class B65_ZK_2105 extends SelectorComposer<Window> { private static final long serialVersionUID = -3344321079575322219L; @WireVariable private Desktop desktop; @Wire private Vbox inf; @Listen("onClick = #startLongOp") public void doClick() { if (EventQueues.exists("longop")) { return; // busy } ((org.zkoss.zk.ui.sys.DesktopCtrl) desktop).enableServerPush(new org.zkoss.zk.ui.impl.PollingServerPush(2000, 5000, -1)); final EventQueue<Event> eq = EventQueues.lookup("longop"); final EventListener<Event> longOp = new EventListener<Event>() { public void onEvent(Event evt) { if ("doLongOp".equals(evt.getName())) { org.zkoss.lang.Threads.sleep(1000); eq.publish(new Event("endLongOp", null)); } } }; final EventListener<Event> callback = new EventListener<Event>() { public void onEvent(Event evt) throws InterruptedException { if ("endLongOp".equals(evt.getName())) { EventQueues.remove("longop"); org.zkoss.lang.Threads.sleep(1000); Executions.deactivate(desktop); } } }; eq.subscribe(longOp, callback); eq.publish(new Event("doLongOp")); } }