Index: modules/awt/src/main/java/common/java/awt/EventQueueCore.java =================================================================== --- modules/awt/src/main/java/common/java/awt/EventQueueCore.java (revision 532313) +++ modules/awt/src/main/java/common/java/awt/EventQueueCore.java (working copy) @@ -88,15 +88,13 @@ // TODO: add event coalescing if (toolkit != null) { toolkit.shutdownWatchdog.setAwtQueueEmpty(false); - if (!GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance()) { - notifyEventMonitor(toolkit); - } + notifyEventMonitor(toolkit); } notifyAll(); } void notifyEventMonitor(Toolkit t) { - Object em = t.getNativeEventQueue().getEventMonitor(); + Object em = t.getEventMonitor(); synchronized (em) { em.notifyAll(); } Index: modules/awt/src/main/java/common/java/awt/EventDispatchThread.java =================================================================== --- modules/awt/src/main/java/common/java/awt/EventDispatchThread.java (revision 532313) +++ modules/awt/src/main/java/common/java/awt/EventDispatchThread.java (working copy) @@ -96,7 +96,7 @@ if (!eventQueue.isEmpty() || !nativeQueue.isEmpty()) { return; } - Object eventMonitor = nativeQueue.getEventMonitor(); + Object eventMonitor = toolkit.getEventMonitor(); synchronized(eventMonitor) { try { eventMonitor.wait(); Index: modules/awt/src/main/java/common/java/awt/Toolkit.java =================================================================== --- modules/awt/src/main/java/common/java/awt/Toolkit.java (revision 532313) +++ modules/awt/src/main/java/common/java/awt/Toolkit.java (working copy) @@ -1177,6 +1177,10 @@ return wtk.getNativeEventQueue(); } + Object getEventMonitor(){ + return wtk.getNativeEventQueue().getEventMonitor(); + } + /** * Returns a shared instance of implementation of org.apache.harmony.awt.wtk.NativeCursor * for current platform for Index: modules/awt/src/main/java/common/java/awt/HeadlessToolkit.java =================================================================== --- modules/awt/src/main/java/common/java/awt/HeadlessToolkit.java (revision 532313) +++ modules/awt/src/main/java/common/java/awt/HeadlessToolkit.java (working copy) @@ -39,6 +39,9 @@ import org.apache.harmony.awt.wtk.WindowFactory; public final class HeadlessToolkit extends ToolkitImpl { + + private class EventMonitor {} + private final Object eventMonitor = new EventMonitor(); @Override protected ButtonPeer createButton(Button a0) throws HeadlessException { @@ -159,6 +162,11 @@ } @Override + public final Object getEventMonitor() { + return eventMonitor; + } + + @Override GraphicsFactory getGraphicsFactory() throws HeadlessException { throw new HeadlessException(); } Index: modules/awt/src/main/java/common/java/awt/HeadlessEventDispatchThread.java =================================================================== --- modules/awt/src/main/java/common/java/awt/HeadlessEventDispatchThread.java (revision 532313) +++ modules/awt/src/main/java/common/java/awt/HeadlessEventDispatchThread.java (working copy) @@ -53,6 +53,7 @@ toolkit.shutdownWatchdog.setAwtQueueEmpty(true); toolkit.onQueueEmpty(); lastPaintTime = System.currentTimeMillis(); + waitForAnyEvent(); } } catch (Throwable t) { t.printStackTrace(); @@ -60,4 +61,18 @@ } } + private void waitForAnyEvent() { + EventQueue eventQueue = toolkit.getSystemEventQueueImpl(); + if (!eventQueue.isEmpty()) { + return; + } + + Object eventMonitor = toolkit.getEventMonitor(); + synchronized(eventMonitor) { + try { + eventMonitor.wait(); + } catch (InterruptedException e) {} + } + } + }