< prev index next >
src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java
Print this page
*** 28,37 ****
--- 28,39 ----
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
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;
import java.util.Set;
*** 262,279 ****
--- 264,302 ----
if (targetAppContext.isDisposed()) {
return false;
}
SunToolkit.postEvent(targetAppContext, se);
if (EventQueue.isDispatchThread()) {
+ 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<EventQueue>) 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()) {
try {
se.wait(1000);
} catch (InterruptedException ie) {
< prev index next >