home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / Papers / OS Shell in Java / Facade / Timer.java < prev    next >
Encoding:
Java Source  |  1998-06-18  |  2.7 KB  |  144 lines  |  [TEXT/dosa]

  1. //    Timer.java : this is a Java source code file for the program Facade.
  2. //    Copyright 1998, Andrew S. Downs
  3. //    andrew.downs@tulane.edu
  4. //
  5. //    This source code is distributed as freeware.
  6. //    Just keep this author information in the file.  Enjoy!
  7.  
  8. //import java.awt.*;
  9. //import java.beans.*;
  10. import java.io.*;
  11. import java.util.*;
  12.  
  13. public class Timer implements Runnable, Serializable {
  14.  
  15.     protected transient Vector listeners = new Vector();
  16.     private int interval = 1;
  17.     private int interval2 = 0;
  18.     private transient Thread runner;
  19.  
  20.     public Timer() {
  21.         this.setInterval( 1 );
  22.         reset();
  23.     }
  24.  
  25.     public Timer( int i ) {
  26.         this.setInterval( i );
  27.         reset();
  28.     }
  29.  
  30.     public Timer( int i, int j ) {
  31.         this.setInterval( i );
  32.         this.setInterval2( j );
  33.         reset();
  34.     }
  35.  
  36.     private void startTime() {
  37.         if ( runner != null );
  38.             runner.start();
  39.     }
  40.  
  41.     private void stopTime() {
  42.         if ( runner != null );
  43.             runner.stop();
  44.     }
  45.  
  46.     public void suspend() {
  47.         if ( runner != null );
  48.             runner.suspend();
  49.     }
  50.  
  51.     public void resume() {
  52.         if ( runner != null );
  53.             runner.resume();
  54.     }
  55.  
  56.     public void reset() {
  57. //        time = 0;
  58.         runner = new Thread( this );
  59.         runner.start();
  60.     }
  61.  
  62.     public int getInterval() {
  63.         return interval;
  64.     }
  65.  
  66.     public void setInterval( int seconds ) {
  67.         interval = seconds;
  68.     }
  69.  
  70.     public void setInterval2( int seconds ) {
  71.         interval2 = seconds;
  72.     }
  73.  
  74.     public void run() {
  75.         while ( true ) {
  76.  
  77.             try {
  78.                 if ( interval2 > 0 )
  79.                     Thread.sleep( interval, interval2 );
  80.                 else if ( interval < 100 )
  81.                     Thread.sleep( interval * 1000 );
  82.                 else
  83.                     Thread.sleep( interval );
  84.             }
  85.             catch ( InterruptedException ex ) {
  86.             }
  87.  
  88.             notifyTimerExpired();
  89.         }
  90.     }
  91.  
  92.     private void notifyTimerExpired() {
  93.         TimerEvent evt = new TimerEvent( this );
  94.  
  95.         Vector v;
  96.  
  97.         synchronized( this ) {
  98.             v = ( Vector ) listeners.clone();
  99.         }
  100.  
  101.         for ( int i = 0; i < v.size(); i++ ) {
  102.             TimerEventListener t = ( TimerEventListener )v.elementAt( i );
  103.             t.timerExpired( evt );
  104.         }
  105.     }
  106.  
  107.     public void addListener( Object l ) {
  108.         listeners.addElement( l );
  109.     }
  110.  
  111.     public void removeListener( Object l ) {
  112.         listeners.removeElement( l );
  113.     }
  114.  
  115.     private void writeObject( ObjectOutputStream s ) throws IOException {
  116.         s.defaultWriteObject();
  117.         s.writeInt( interval );
  118.  
  119.         Vector v;
  120.  
  121.         synchronized( this ) {
  122.             v = ( Vector ) listeners.clone();
  123.         }
  124.  
  125.         for ( int i = 0; i < v.size(); i++ ) {
  126. //            TimerEventListener t = ( TimerEventListener )v.elementAt( i );
  127.             Object l = v.elementAt( i );
  128.             if ( l instanceof Serializable )
  129.                 s.writeObject( l );
  130.         }
  131.     }
  132.  
  133.     private void readObject( ObjectInputStream s ) throws ClassNotFoundException, IOException {
  134.         s.defaultReadObject();
  135.         setInterval( s.readInt() );
  136.  
  137.         Object l;
  138.         while ( ( l = s.readObject() ) != null )
  139.             addListener( l );
  140.  
  141.         reset();
  142.     }
  143. }
  144.