On Wed, 3 May 2023 11:46:50 GMT, buedi <d...@openjdk.org> wrote: > A null pointer exception occurs on the ScenePulseListener when iterating > through the dirty node list. > A null check is needed on the node before calling node.getScene(). > > The error occurs occasionally and causes the application to crash.
Hi @buedi, I've taken a look at this, but would like to know the root cause. I get the impression that this happens a lot for you, could you share when this happens so I can reproduce this as well? You could also try this code and report back if you get any of the exceptions I added: private void synchronizeSceneNodes() { Toolkit.getToolkit().checkFxUserThread(); Scene.inSynchronizer = true; // if dirtyNodes is null then that means this Scene has not yet been // synchronized, and so we will simply synchronize every node in the // scene and then create the dirty nodes array list if (Scene.this.dirtyNodes == null) { // must do this recursively syncAll(getRoot()); dirtyNodes = new Node[MIN_DIRTY_CAPACITY]; } else { if (peer == null) { throw new IllegalStateException("peer shouldn't be null here: " + dirtyNodesSize); } // This is not the first time this scene has been synchronized, // so we will only synchronize those nodes that need it for (int i = 0 ; i < dirtyNodesSize; ++i) { try { Node node = dirtyNodes[i]; dirtyNodes[i] = null; if (node.getScene() == Scene.this) { node.syncPeer(); } } catch (Throwable e) { throw new IllegalStateException("exception will break dirtyNodes!", e); } } dirtyNodesSize = 0; } if (!Scene.inSynchronizer) { throw new IllegalStateException("Synchronizer flag was reset, reentrant call?"); } Scene.inSynchronizer = false; } ------------- PR Comment: https://git.openjdk.org/jfx/pull/1123#issuecomment-1534538130