--- old/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java 2017-08-28 14:16:28.830505200 +0530 +++ new/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java 2017-08-28 14:16:27.624764100 +0530 @@ -30,6 +30,8 @@ import java.awt.peer.ComponentPeer; import java.awt.peer.LightweightPeer; import java.lang.ref.WeakReference; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.LinkedList; import java.util.Iterator; import java.util.ListIterator; @@ -264,13 +266,34 @@ } SunToolkit.postEvent(targetAppContext, se); if (EventQueue.isDispatchThread()) { - EventDispatchThread edt = (EventDispatchThread) - Thread.currentThread(); - edt.pumpEvents(SentEvent.ID, new Conditional() { + if (Thread.currentThread() instanceof EventDispatchThread) { + EventDispatchThread edt = (EventDispatchThread) + Thread.currentThread(); + edt.pumpEvents(SentEvent.ID, new Conditional() { public boolean evaluate() { return !se.dispatched && !targetAppContext.isDisposed(); } }); + } else { + EventQueue eventQueue = AccessController.doPrivileged( + (PrivilegedAction) java.awt.Toolkit + .getDefaultToolkit()::getSystemEventQueue); + SecondaryLoop secondaryLoop = eventQueue.createSecondaryLoop(); + new Thread() { + @Override + public void run() { + while(!se.dispatched && !targetAppContext.isDisposed()) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + break; + } + } + secondaryLoop.exit(); + } + }.start(); + secondaryLoop.enter(); + } } else { synchronized (se) { while (!se.dispatched && !targetAppContext.isDisposed()) {