--- javax/swing/Timer.java 2005-11-10 15:09:08.224949882 +0000 +++ javax/swing/Timer.java-jv 2005-11-10 15:07:12.523395499 +0000 @@ -78,8 +78,10 @@ // Ignored } - if (!running) + if (!running) { + setInterrupting(false); return; + } queueEvent(); @@ -159,6 +161,7 @@ * as scheduled. Should only be checked/set with queueLock held. */ boolean running; + private boolean interrupting = false; /** * The delay between subsequent repetetive events. @@ -379,6 +382,14 @@ return running; } + private synchronized void setInterrupting(boolean aStatus) { + interrupting = aStatus; + } + + private synchronized boolean isInterrupting() { + return interrupting; + } + /** * Add the action listener * @@ -414,6 +425,17 @@ */ public void start() { + + while (isInterrupting()) { + //do nothing + try { + synchronized (queueLock) { + queueLock.notifyAll(); + } + } catch(Exception e) { + } + } + synchronized (queueLock) { if (!running) @@ -432,6 +454,7 @@ { synchronized (queueLock) { + setInterrupting(true); running = false; queue = 0; queueLock.notifyAll();