RFR: 8371128: NullPointerException occurs due to double cleanup of SwingNode

Prasanta Sadhukhan psadhukhan at openjdk.org
Tue Nov 4 09:13:57 UTC 2025


It is seen that when we close the SwingNode window while we have registered a WINDOW_HIDDEN listener, it will cause a NPE 
This is because WINDOW_HIDDEN listener called `SwingNode.overrideNativeWindowHandle` to provide a native FX window handle to AWT/Swing via JNI code, which gives provision to AWT/Swing code in sun/swing/JLightweightFrame.java#overrideNativeWindowHandle to handle the window closing

https://github.com/openjdk/jdk/blob/e4aed95cac343f1339b9bc87721561bdc4c2f5ad/src/java.desktop/share/classes/sun/swing/JLightweightFrame.java#L527-L534

But if window is closed, then the node is removed from scene and `SwingNode.disposeLwFrame` is called which nulls "lwFrame" which is the handle for JLightweightFrame AWT frame, so when JNI code 
https://github.com/openjdk/jfx/blob/c77c2335856a967907aaacc9546f44943c069add/modules/javafx.graphics/src/main/native-prism/SwingInterop.c#L47

tries to call JLightweightFrame, it crashes.
Fix is made to check for `lwFrame `before `overrideNativeWindowHandle ` is called inside `SwingNodeHelper.runOnEDT`. 
This is common practice employed inside `SwingNodeHelper.runOnEDT` to check for lwFrame to be not null

-------------

Commit messages:
 - 8371128: NullPointerException occurs due to double cleanup of SwingNode
 - 8371128: NullPointerException occurs due to double cleanup of SwingNode

Changes: https://git.openjdk.org/jfx/pull/1960/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1960&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8371128
  Stats: 103 lines in 2 files changed: 100 ins; 0 del; 3 mod
  Patch: https://git.openjdk.org/jfx/pull/1960.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1960/head:pull/1960

PR: https://git.openjdk.org/jfx/pull/1960


More information about the openjfx-dev mailing list