RFR: 8371128: NullPointerException occurs due to double cleanup of SwingNode [v2]
Andy Goryachev
angorya at openjdk.org
Tue Nov 4 17:25:59 UTC 2025
On Tue, 4 Nov 2025 17:13:25 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:
>> 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
>
> Prasanta Sadhukhan has updated the pull request incrementally with one additional commit since the last revision:
>
> Test message
modules/javafx.swing/src/main/java/javafx/embed/swing/SwingNode.java line 283:
> 281: SwingNodeHelper.runOnEDT(() -> {
> 282: if (lwFrame != null) {
> 283: swNodeIOP.overrideNativeWindowHandle(lwFrame, 0L,
question: is it possible to have `lwFrame` set to `null` between L282 and L283?
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1960#discussion_r2491426546
More information about the openjfx-dev
mailing list