< prev index next >

modules/javafx.graphics/src/main/java/com/sun/javafx/application/PlatformImpl.java

Print this page

        

@@ -89,10 +89,11 @@
     private static Boolean hasMultiTouch;
     private static Boolean hasPointer;
     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<Boolean>) () ->
                 Boolean.getBoolean("javafx.verbose"));
 

@@ -255,10 +256,12 @@
                 checkIdle();
             }
 
             @Override
             public void exitedLastNestedLoop() {
+                if (isImplicitExit())
+                    allNestedLoopsExited.countDown();
                 checkIdle();
             }
         };
         Toolkit.getToolkit().addTkListener(toolkitListener);
 

@@ -561,10 +564,25 @@
     static CountDownLatch test_getPlatformExitLatch() {
         return platformExitLatch;
     }
 
     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;
         }
 
         if (initialized.get()) {
< prev index next >