package javax.swing;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;
import java.util.EventListener;
import javax.swing.event.EventListenerList;
public class Timer implements Serializable
{
protected EventListenerList listenerList = new EventListenerList();
int ticks;
static boolean verbose;
boolean running;
boolean repeat_ticks = true;
long interval, init_delay;
class Waker extends Thread
{
public void run()
{
running = true;
try {
sleep(init_delay);
while (running)
{
sleep(interval);
if (verbose)
{
System.out.println("javax.swing.Timer -> clocktick");
}
ticks++;
fireActionPerformed();
if (! repeat_ticks)
break;
}
running = false;
} catch (Exception e) {
System.out.println("swing.Timer::" + e);
}
}
}
public void addActionListener(ActionListener listener)
{
listenerList.add (ActionListener.class, listener);
}
public void removeActionListener(ActionListener listener)
{
listenerList.remove (ActionListener.class, listener);
}
public EventListener[] getListeners (Class listenerType)
{
return listenerList.getListeners (listenerType);
}
public ActionListener[] getActionListeners ()
{
return (ActionListener[]) listenerList.getListeners (ActionListener.class);
}
protected void fireActionPerformed (ActionEvent event)
{
ActionListener[] listeners = getActionListeners();
for (int i = 0; i < listeners.length; i++)
{
listeners [i].actionPerformed (event);
}
}
void fireActionPerformed ()
{
fireActionPerformed (new ActionEvent (this, ticks, "Timer"));
}
public static void setLogTimers(boolean flag)
{
verbose = flag;
}
public static boolean getLogTimers()
{
return verbose;
}
public void setDelay(int delay)
{
interval = delay;
}
public int getDelay()
{
return (int)interval;
}
public void setInitialDelay(int initialDelay)
{
init_delay = initialDelay;
}
public void setRepeats(boolean flag)
{
repeat_ticks = flag;
}
public boolean isRunning()
{
return running;
}
public void start()
{
if (isRunning())
{
System.err.println("attempt to start a running timer");
return;
}
new Waker().start();
}
public void stop()
{
running = false;
}
}