RFR: 8334593: Adding, removing and then adding a JFXPanel again leads to NullPointerException [v3]

Andy Goryachev angorya at openjdk.org
Mon Jul 1 20:34:25 UTC 2024


On Mon, 1 Jul 2024 09:16:52 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:

>> Adding, then removing, and then adding a JFXPanel to the same component in the Swing scene graph leads to a NullPointerException in GlassScene because the sceneState is null.
>> Removing JFXPanel calls JFXPanel.removeNotify which calls Window.hide which calls SceneHelper.disposePeer -> Scene.disposePeer -> EmbeddedScene.dispose -> GlassScene.dispose which sets "sceneState" to null...
>> so when GlassScene.updateSceneState is called, it results in NPE.
>> Fix is to check if `host` (which is usually javafx.embed.swing.JFXPanel$HostContainer for active JFXPanel) has been reset/deleted which is done when `EmbeddedScene.dispose` is called during removeNotify and abstain from updating the scene state
>
> Prasanta Sadhukhan has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Test fix

modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/EmbeddedScene.java line 160:

> 158:         Platform.runLater(() -> {
> 159:             QuantumToolkit.runWithRenderLock(() -> {
> 160:                 if (host != null) {

I think we need a different solution here, as mentioned in line 58


// TODO: synchronize access to embedder from ET and RT

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1493#discussion_r1661510943


More information about the openjfx-dev mailing list