Changeset ec43ca27a88a caused one more problem. When running SWT port of Glass (-Dglass.platform=swt), the following exception is thrown when a window is closed:
[java] java.lang.IllegalStateException: The window has already been closed
[java] at com.sun.glass.ui.Window.checkNotClosed(Window.java:284)
[java] at com.sun.glass.ui.Window.getNativeWindow(Window.java:312)
[java] at com.sun.prism.PresentableState.update(PresentableState.java:257)
[java] at com.sun.javafx.tk.quantum.SceneState.update(SceneState.java:84)
[java] at com.sun.javafx.tk.quantum.GlassScene.updateSceneState(GlassScene.java:264)
[java] at com.sun.javafx.tk.quantum.GlassScene.releaseSynchronization(GlassScene.java:118)
[java] at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2318)
[java] at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:358)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:560)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:540)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit$15.run(QuantumToolkit.java:425)
[java] at org.eclipse.swt.widgets.RunnableLock.run(Unknown Source)
[java] at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source)
[java] at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source)
[java] at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
[java] at com.sun.glass.ui.swt.SWTApplication.runSWTEventLoop(SWTApplication.java:80)
[java] at com.sun.glass.ui.swt.SWTApplication$2.run(SWTApplication.java:173)
[java] at java.lang.Thread.run(Thread.java:722)
It's reproduced only with Glass/SWT. The reason is that SWT doesn't send WindowEvent.CLOSE before WindowEvent.DESTROY, so the window is disposed from SWT, not from JavaFX side. It's unclear if Quantum should be ready to handle this.
[java] java.lang.IllegalStateException: The window has already been closed
[java] at com.sun.glass.ui.Window.checkNotClosed(Window.java:284)
[java] at com.sun.glass.ui.Window.getNativeWindow(Window.java:312)
[java] at com.sun.prism.PresentableState.update(PresentableState.java:257)
[java] at com.sun.javafx.tk.quantum.SceneState.update(SceneState.java:84)
[java] at com.sun.javafx.tk.quantum.GlassScene.updateSceneState(GlassScene.java:264)
[java] at com.sun.javafx.tk.quantum.GlassScene.releaseSynchronization(GlassScene.java:118)
[java] at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2318)
[java] at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:358)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:560)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:540)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit$15.run(QuantumToolkit.java:425)
[java] at org.eclipse.swt.widgets.RunnableLock.run(Unknown Source)
[java] at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source)
[java] at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source)
[java] at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
[java] at com.sun.glass.ui.swt.SWTApplication.runSWTEventLoop(SWTApplication.java:80)
[java] at com.sun.glass.ui.swt.SWTApplication$2.run(SWTApplication.java:173)
[java] at java.lang.Thread.run(Thread.java:722)
It's reproduced only with Glass/SWT. The reason is that SWT doesn't send WindowEvent.CLOSE before WindowEvent.DESTROY, so the window is disposed from SWT, not from JavaFX side. It's unclear if Quantum should be ready to handle this.
- relates to
-
JDK-8124388 FXCanvas, JFXPanel: Exception when closing window
-
- Resolved
-