/* * Copyright 2003,2004,2005 Colin Crist * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package hermes.swing; import java.util.HashMap; import java.util.Map; import java.util.Timer; import java.util.TimerTask; /** * @author colincrist@hermesjms.com * @version $Id: TimedSwingRunner.java,v 1.1 2006/05/13 14:06:55 colincrist Exp $ */ public class TimedSwingRunner { private static Timer timer = new Timer(); private long timeout; private Map<Object, Runnable> runnables = new HashMap<Object, Runnable>(); private boolean stopped = false; public TimedSwingRunner(long timeout) { super(); this.timeout = timeout; TimerTask task = new TimerTask() { @Override public void run() { drain(); } }; timer.schedule(task, timeout); } public synchronized void invokeLater(Object context, Runnable runnable) { runnables.put(context, runnable); } public void stop() { stopped = true ; } private synchronized void drain() { for (Runnable runnable : runnables.values()) { if (runnable != null) { SwingRunner.invokeLater(runnable); } } runnables.clear(); if (!stopped) { TimerTask task = new TimerTask() { @Override public void run() { drain(); } }; timer.schedule(task, timeout); } } }