I would submit it to bugreport.java.com. On Thu, Sep 2, 2021 at 9:08 PM Troels Skytte Kaspersen <tr...@eg.dk> wrote:
> Hi, > > We have received many complaints from our customers that the popups are > not shown anymore after a period of time. > > I have then created a simple piece of code that result in the error our > customers get: > > package test; > > import javafx.application.Application; > import javafx.scene.Scene; > import javafx.scene.layout.StackPane; > import javafx.stage.Popup; > import javafx.stage.Stage; > > public class TestFX extends Application { > > @Override > public void start(Stage primaryStage) { > System.out.println("javafx.runtime.version: " + > System.getProperties().get("javafx.runtime.version")); > Stage stage = new Stage(); > Scene scene = new Scene(new StackPane()); > stage.setScene(scene); > stage.show(); > Popup popOver = new Popup(); > for (int i = 0; i < 99999; i++) { > popOver.show(scene.getRoot(), 1, 1); > popOver.hide(); > System.out.println(i); > } > } > > public static void main(String[] args) { > launch(args); > } > } > > I use javafx 16+8 > > If I run the code, it will result in error after various iterations: > > Exception in Application start method > Exception in thread "JavaFX Application Thread" > java.lang.NullPointerException > at > javafx.base/com.sun.javafx.binding.ExpressionHelper.removeListener(ExpressionHelper.java:73) > at > javafx.base/javafx.beans.property.ReadOnlyBooleanPropertyBase.removeListener(ReadOnlyBooleanPropertyBase.java:67) > at > javafx.graphics/javafx.stage.PopupWindow.unbindOwnerFocusedProperty(PopupWindow.java:895) > at > javafx.graphics/javafx.stage.PopupWindow.doVisibleChanged(PopupWindow.java:542) > at > javafx.graphics/javafx.stage.PopupWindow$1.doVisibleChanged(PopupWindow.java:111) > at > javafx.graphics/com.sun.javafx.stage.PopupWindowHelper.visibleChangedImpl(PopupWindowHelper.java:63) > at > javafx.graphics/com.sun.javafx.stage.WindowHelper.visibleChanged(WindowHelper.java:77) > at > javafx.graphics/javafx.stage.Window$12.invalidated(Window.java:1160) > at > javafx.base/javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110) > at > javafx.base/javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:145) > at > javafx.graphics/javafx.stage.Window.setShowing(Window.java:1187) > at javafx.graphics/javafx.stage.Window.hide(Window.java:1212) > at > javafx.graphics/javafx.stage.PopupWindow.hide(PopupWindow.java:486) > at > javafx.graphics/javafx.stage.PopupWindow.lambda$new$0(PopupWindow.java:147) > at > javafx.base/javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:86) > at > javafx.base/com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181) > at > javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80) > at > javafx.graphics/javafx.scene.Node$TreeShowingPropertyReadOnly.invalidate(Node.java:8479) > at > javafx.graphics/javafx.scene.Node.setTreeShowing(Node.java:8436) > at > javafx.graphics/javafx.scene.Node.updateTreeShowing(Node.java:8427) > at > javafx.graphics/javafx.scene.Node.lambda$new$2(Node.java:1010) > at > javafx.base/com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:360) > at > javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80) > at > javafx.base/javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:78) > at > javafx.base/javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:103) > at > javafx.base/javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:111) > at > javafx.base/javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:145) > at > javafx.graphics/javafx.stage.Window.setShowing(Window.java:1187) > at javafx.graphics/javafx.stage.Window.hide(Window.java:1212) > at > javafx.graphics/com.sun.javafx.stage.WindowPeerListener.closed(WindowPeerListener.java:105) > at > javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:144) > at > javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:40) > at > java.base/java.security.AccessController.doPrivileged(AccessController.java:391) > at > javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.lambda$handleWindowEvent$4(GlassWindowEventHandler.java:176) > at > javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412) > at > javafx.graphics/com.sun.javafx.tk.quantum.GlassWindowEventHandler.handleWindowEvent(GlassWindowEventHandler.java:174) > at > javafx.graphics/com.sun.glass.ui.Window.handleWindowEvent(Window.java:1336) > at > javafx.graphics/com.sun.glass.ui.Window.notifyDestroy(Window.java:1250) > at > javafx.graphics/com.sun.glass.ui.win.WinWindow._close(Native Method) > at > javafx.graphics/com.sun.glass.ui.Window.close(Window.java:352) > at > javafx.graphics/com.sun.glass.ui.win.WinWindow.close(WinWindow.java:316) > at > javafx.graphics/com.sun.glass.ui.Application.terminate(Application.java:394) > at > javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$exit$13(QuantumToolkit.java:831) > at > javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithRenderLock(QuantumToolkit.java:430) > at > javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.exit(QuantumToolkit.java:827) > at > javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$tkExit$16(PlatformImpl.java:614) > at > javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:474) > at > javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447) > at > java.base/java.security.AccessController.doPrivileged(AccessController.java:391) > at > javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:446) > at > javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) > at > javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) > at > javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) > at java.base/java.lang.Thread.run(Thread.java:831) > java.lang.reflect.InvocationTargetException > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:567) > at > javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464) > at > javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:567) > at > java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071) > Caused by: java.lang.RuntimeException: Exception in Application start > method > at > javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900) > at > javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195) > at java.base/java.lang.Thread.run(Thread.java:831) > Caused by: java.lang.RuntimeException: could not create platform window > at > javafx.graphics/com.sun.glass.ui.Window.<init>(Window.java:294) > at > javafx.graphics/com.sun.glass.ui.win.WinWindow.<init>(WinWindow.java:54) > at > javafx.graphics/com.sun.glass.ui.win.WinApplication.createWindow(WinApplication.java:219) > at > javafx.graphics/com.sun.javafx.tk.quantum.WindowStage.initPlatformWindow(WindowStage.java:201) > at > javafx.graphics/com.sun.javafx.tk.quantum.WindowStage.init(WindowStage.java:143) > at > javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.createTKPopupStage(QuantumToolkit.java:678) > at > javafx.graphics/javafx.stage.PopupWindow.doVisibleChanging(PopupWindow.java:514) > at > javafx.graphics/javafx.stage.PopupWindow$1.doVisibleChanging(PopupWindow.java:107) > at > javafx.graphics/com.sun.javafx.stage.PopupWindowHelper.visibleChangingImpl(PopupWindowHelper.java:57) > at > javafx.graphics/com.sun.javafx.stage.WindowHelper.visibleChanging(WindowHelper.java:73) > at > javafx.graphics/javafx.stage.Window$12.invalidated(Window.java:1065) > at > javafx.base/javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110) > at > javafx.base/javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:145) > at > javafx.graphics/javafx.stage.Window.setShowing(Window.java:1187) > at javafx.graphics/javafx.stage.Window.show(Window.java:1202) > at > javafx.graphics/javafx.stage.PopupWindow.showImpl(PopupWindow.java:472) > at > javafx.graphics/javafx.stage.PopupWindow.show(PopupWindow.java:417) > at test.TestFX.start(TestFX.java:35) > at > javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) > at > javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:474) > at > javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447) > at > java.base/java.security.AccessController.doPrivileged(AccessController.java:391) > at > javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:446) > at > javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) > at > javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) > at > javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) > ... 1 more > Exception running application test.TestFX > B_ > > I have tried javafx version down to javafx 11 and the error always occurs > at some point. > > I would consider this a very critical error. The workaround seems to just > set the opacity to 0 instead of hide(), but still I expect this code to run > until the end.. > > Venlig hilsen / best regards > > Troels Skytte Kaspersen > Software Developer > ASPECT4 Development > > EG A/S ∙ Finsensvej 3 ∙ 7430 Ikast > T: +45 7013 2211 ∙ D: +45 7260 2235 > F: +45 7013 2299 ∙ M: +45 2085 9209 > E-mail: tr...@eg.dk<mailto:tr...@eg.dk> ∙ web: www.eg.dk<http://www.eg.dk> > Read our Privacy Policy<https://global.eg.dk/about-eg/treatment-of-data/> >