reproducing case
Run attached sample
Click button
current result
runnable - run() 14:49:45.960 [qtp1668627309-29] ERROR org.zkoss.zk.ui.impl.DesktopImpl -- Exception occured while processing scheduled server push java.lang.NullPointerException: Cannot invoke "org.zkoss.zk.ui.Desktop.getWebApp()" because the return value of "org.zkoss.zk.ui.Page.getDesktop()" is null at org.zkoss.zk.ui.AbstractComponent.getAttachedUiEngine(AbstractComponent.java:375) at org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1864) at org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1838) at org.zkoss.zk.ui.HtmlBasedComponent.setSclass(HtmlBasedComponent.java:359) at org.zkoss.zk.ui.HtmlBasedComponent.addSclass(HtmlBasedComponent.java:380) at ScheduleComposerSimple_16678.lambda$1(ScheduleComposerSimple_16678.java:31) at java.base/java.util.Optional.ifPresent(Optional.java:178) at ScheduleComposerSimple_16678.executeEventListener(ScheduleComposerSimple_16678.java:43) at org.zkoss.zk.ui.impl.DesktopImpl$ScheduleInfo.invoke(DesktopImpl.java:1880) at org.zkoss.zk.ui.impl.DesktopImpl$ScheduleListener.onEvent(DesktopImpl.java:1899) at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:3191) at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:3161) at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:3103) at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138) at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1884) at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1656) at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1323) at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:571) at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:451) at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:459) ...
expected result
no exception, silently ignore of no page / desktop / webapp
debugging information
Reproducing case forces the error case, but it also happen in production.
production case doesn't manually destroys page, and is hard to track why the desktop / webapp might be null
Steps to reproduce: case 2
- open 2 browser tabs for zk-3729.zul
- in the 1st tab, click "sync long op"
- quickly change to the 2nd tab, click "log out" button ((SimpleSession)Sessions.getCurrent()).invalidateNow();
Current Result
java.lang.NullPointerException: Cannot invoke "org.zkoss.zk.ui.Desktop.getWebApp()" because the return value of "org.zkoss.zk.ui.Page.getDesktop()" is null
at org.zkoss.zk.ui.AbstractComponent.getAttachedUiEngine(AbstractComponent.java:380)
at org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1863)
at org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1837)
at org.zkoss.zk.ui.HtmlBasedComponent.setSclass(HtmlBasedComponent.java:359)
at org.zkoss.zk.ui.HtmlBasedComponent.addSclass(HtmlBasedComponent.java:380)
at bug.ZK3729Composer.longOp(ZK3729Composer.java:33)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
Expected result
no error on the page