home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / TimerQueue.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  2.6 KB  |  174 lines

  1. package javax.swing;
  2.  
  3. class TimerQueue implements Runnable {
  4.    private static final Object sharedInstanceKey = new StringBuffer("TimerQueue.sharedInstanceKey");
  5.    private static final Object expiredTimersKey = new StringBuffer("TimerQueue.expiredTimersKey");
  6.    Timer firstTimer;
  7.    boolean running;
  8.    private static final Object classLock = new Object();
  9.  
  10.    public TimerQueue() {
  11.       this.start();
  12.    }
  13.  
  14.    public static TimerQueue sharedInstance() {
  15.       Object var0 = classLock;
  16.       synchronized(var0) {
  17.          TimerQueue var1 = (TimerQueue)SwingUtilities.appContextGet(sharedInstanceKey);
  18.          if (var1 == null) {
  19.             var1 = new TimerQueue();
  20.             SwingUtilities.appContextPut(sharedInstanceKey, var1);
  21.          }
  22.  
  23.          return var1;
  24.       }
  25.    }
  26.  
  27.    synchronized void start() {
  28.       if (this.running) {
  29.          throw new RuntimeException("Can't start a TimerQueue that is already running");
  30.       } else {
  31.          Thread var1 = new Thread(this, "TimerQueue");
  32.  
  33.          try {
  34.             var1.setDaemon(true);
  35.          } catch (SecurityException var3) {
  36.          }
  37.  
  38.          var1.start();
  39.          this.running = true;
  40.       }
  41.    }
  42.  
  43.    synchronized void stop() {
  44.       this.running = false;
  45.       this.notify();
  46.    }
  47.  
  48.    synchronized void addTimer(Timer var1, long var2) {
  49.       if (!var1.running) {
  50.          Timer var4 = null;
  51.  
  52.          Timer var5;
  53.          for(var5 = this.firstTimer; var5 != null && var5.expirationTime <= var2; var5 = var5.nextTimer) {
  54.             var4 = var5;
  55.          }
  56.  
  57.          if (var4 == null) {
  58.             this.firstTimer = var1;
  59.          } else {
  60.             var4.nextTimer = var1;
  61.          }
  62.  
  63.          var1.expirationTime = var2;
  64.          var1.nextTimer = var5;
  65.          var1.running = true;
  66.          this.notify();
  67.       }
  68.    }
  69.  
  70.    synchronized void removeTimer(Timer var1) {
  71.       if (var1.running) {
  72.          Timer var2 = null;
  73.          Timer var3 = this.firstTimer;
  74.  
  75.          boolean var4;
  76.          for(var4 = false; var3 != null; var3 = var3.nextTimer) {
  77.             if (var3 == var1) {
  78.                var4 = true;
  79.                break;
  80.             }
  81.  
  82.             var2 = var3;
  83.          }
  84.  
  85.          if (var4) {
  86.             if (var2 == null) {
  87.                this.firstTimer = var1.nextTimer;
  88.             } else {
  89.                var2.nextTimer = var1.nextTimer;
  90.             }
  91.  
  92.             var1.expirationTime = 0L;
  93.             var1.nextTimer = null;
  94.             var1.running = false;
  95.          }
  96.       }
  97.    }
  98.  
  99.    synchronized boolean containsTimer(Timer var1) {
  100.       return var1.running;
  101.    }
  102.  
  103.    synchronized long postExpiredTimers() {
  104.       long var4;
  105.       do {
  106.          Timer var1 = this.firstTimer;
  107.          if (var1 == null) {
  108.             return 0L;
  109.          }
  110.  
  111.          long var2 = System.currentTimeMillis();
  112.          var4 = var1.expirationTime - var2;
  113.          if (var4 <= 0L) {
  114.             try {
  115.                var1.post();
  116.             } catch (SecurityException var8) {
  117.             }
  118.  
  119.             this.removeTimer(var1);
  120.             if (var1.isRepeats()) {
  121.                this.addTimer(var1, var2 + (long)var1.getDelay());
  122.             }
  123.          }
  124.  
  125.          try {
  126.             this.wait(1L);
  127.          } catch (InterruptedException var7) {
  128.          }
  129.       } while(var4 <= 0L);
  130.  
  131.       return var4;
  132.    }
  133.  
  134.    public synchronized void run() {
  135.       try {
  136.          while(this.running) {
  137.             long var1 = this.postExpiredTimers();
  138.  
  139.             try {
  140.                this.wait(var1);
  141.             } catch (InterruptedException var5) {
  142.             }
  143.          }
  144.  
  145.       } catch (ThreadDeath var6) {
  146.          this.running = false;
  147.  
  148.          for(Timer var4 = this.firstTimer; var4 != null; var4 = var4.nextTimer) {
  149.             var4.eventQueued = false;
  150.          }
  151.  
  152.          SystemEventQueueUtilities.restartTimerQueueThread();
  153.          throw var6;
  154.       }
  155.    }
  156.  
  157.    public synchronized String toString() {
  158.       StringBuffer var1 = new StringBuffer();
  159.       var1.append("TimerQueue (");
  160.       Timer var2 = this.firstTimer;
  161.  
  162.       while(var2 != null) {
  163.          var1.append(var2.toString());
  164.          var2 = var2.nextTimer;
  165.          if (var2 != null) {
  166.             var1.append(", ");
  167.          }
  168.       }
  169.  
  170.       var1.append(")");
  171.       return var1.toString();
  172.    }
  173. }
  174.