diff --git a/modules/graphics/src/main/java/com/sun/javafx/tk/quantum/GlassWindowEventHandler.java b/modules/graphics/src/main/java/com/sun/javafx/tk/quantum/GlassWindowEventHandler.java --- a/modules/graphics/src/main/java/com/sun/javafx/tk/quantum/GlassWindowEventHandler.java +++ b/modules/graphics/src/main/java/com/sun/javafx/tk/quantum/GlassWindowEventHandler.java @@ -129,8 +129,14 @@ this.window = window; this.type = type; - AccessControlContext acc = stage.getAccessControlContext(); - AccessController.doPrivileged(this, acc); + final boolean locked = ViewPainter.renderLock.isHeldByCurrentThread(); + if (locked) ViewPainter.renderLock.unlock(); + try { + AccessControlContext acc = stage.getAccessControlContext(); + AccessController.doPrivileged(this, acc); + } finally { + if (locked) ViewPainter.renderLock.lock(); + } } @Override @@ -146,10 +152,16 @@ } } - AccessControlContext acc = stage.getAccessControlContext(); - AccessController.doPrivileged((PrivilegedAction)() -> { - stage.stageListener.changedScreen(oldScreen, newScreen); - return (Void)null; - } , acc); + final boolean locked = ViewPainter.renderLock.isHeldByCurrentThread(); + if (locked) ViewPainter.renderLock.unlock(); + try { + AccessControlContext acc = stage.getAccessControlContext(); + AccessController.doPrivileged((PrivilegedAction)() -> { + stage.stageListener.changedScreen(oldScreen, newScreen); + return (Void)null; + } , acc); + } finally { + if (locked) ViewPainter.renderLock.lock(); + } } }