--- old/modules/javafx.graphics/src/main/java/com/sun/javafx/application/PlatformImpl.java 2018-07-12 13:02:39.758325999 +0530 +++ new/modules/javafx.graphics/src/main/java/com/sun/javafx/application/PlatformImpl.java 2018-07-12 13:02:39.458475999 +0530 @@ -91,6 +91,7 @@ private static boolean isThreadMerged = false; private static String applicationType = ""; private static BooleanProperty accessibilityActive = new SimpleBooleanProperty(); + private static CountDownLatch allNestedLoopsExited = new CountDownLatch(1); private static final boolean verbose = AccessController.doPrivileged((PrivilegedAction) () -> @@ -257,6 +258,8 @@ @Override public void exitedLastNestedLoop() { + if (isImplicitExit()) + allNestedLoopsExited.countDown(); checkIdle(); } }; @@ -563,6 +566,21 @@ } public static void tkExit() { + + PlatformImpl.runAndWait(() -> { + if (Toolkit.getToolkit().isNestedLoopRunning()) { + Toolkit.getToolkit().exitAllNestedEventLoops(); + } else { + allNestedLoopsExited.countDown(); + } + }); + + try { + allNestedLoopsExited.await(); + } catch (InterruptedException e) { + throw new RuntimeException("Could not exit all nested event loops"); + } + if (toolkitExit.getAndSet(true)) { return; }