Adds a listener.
Note: if the listener is added twice, it will be invoked twice when a corresponding event occurs.
@param listener the listener. It cannot be null.It must be an instance that implements {@link org.zkoss.zk.ui.util.DesktopCleanup}, {@link org.zkoss.zk.ui.util.ExecutionInit}, {@link org.zkoss.zk.ui.util.ExecutionCleanup}, {@link org.zkoss.zk.ui.util.UiLifeCycle}, {@link org.zkoss.zk.ui.util.EventInterceptor}and/or {@link org.zkoss.zk.au.AuService}.
Note: {@link org.zkoss.zk.ui.util.DesktopInit}, {@link org.zkoss.zk.ui.event.EventThreadInit}, {@link org.zkoss.zk.ui.event.EventThreadCleanup}, {@link org.zkoss.zk.ui.event.EventThreadSuspend} and{@link org.zkoss.zk.ui.event.EventThreadResume} are not supported.
@exception IllegalArgumentException if not a valid listener.
@since 3.0.6