gecko-dev/grendel/dog/util/Timer.java
1999-11-02 01:51:54 +00:00

101 lines
2.2 KiB
Java

/*
* Timer.java
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Knife.
*
* The Initial Developer of the Original Code is dog.
* Portions created by dog are
* Copyright (C) 1998 dog <dog@dog.net.uk>. All
* Rights Reserved.
*
* Contributor(s): n/a.
*
* You may retrieve the latest version of this package at the knife home page,
* located at http://www.dog.net.uk/knife/
*/
package dog.util;
/**
* A timer class that wakes up listeners after a specified number of milliseconds.
*
* @author dog@dog.net.uk
* @version 0.3
*/
public final class Timer extends Thread {
long time;
long interval = 0;
TimerListener listener;
/**
* Constructs a timer.
*/
public Timer(TimerListener listener) {
this(listener, 0, false);
}
/**
* Constructs a timer with the specified interval, and starts it.
*/
public Timer(TimerListener listener, long interval) {
this(listener, interval, true);
}
/**
* Constructs a timer with the specified interval, indicating whether or not to start it.
*/
public Timer(TimerListener listener, long interval, boolean start) {
this.listener = listener;
this.interval = interval;
time = System.currentTimeMillis();
setDaemon(true);
setPriority(Thread.MIN_PRIORITY);
if (start)
start();
}
// -- Accessor methods --
/**
* Returns this timer's interval.
*/
public long getInterval() {
return interval;
}
/**
* Sets this timer's interval.
*/
public void setInterval(long interval) {
this.interval = interval;
}
/**
* Runs this timer.
*/
public void run() {
boolean interrupt = false;
while (!interrupt) {
synchronized (this) {
try {
wait(interval);
} catch (InterruptedException e) {
interrupt = true;
}
listener.timerFired(new TimerEvent(this, interval));
}
}
}
}