home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / TimerQueue.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  5.2 KB  |  259 lines

  1. package com.sun.java.swing;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Toolkit;
  5. import java.util.Enumeration;
  6. import java.util.Hashtable;
  7. import java.util.Vector;
  8.  
  9. class TimerQueue implements Runnable {
  10.    Timer firstTimer;
  11.    boolean running;
  12.    private static final Object sharedInstanceKey = new StringBuffer("TimerQueue.sharedInstanceKey");
  13.    private static final Object expiredTimersKey = new StringBuffer("TimerQueue.expiredTimersKey");
  14.    private static Hashtable timerPanels = null;
  15.    // $FF: synthetic field
  16.    static Class class$com$sun$java$swing$TimerQueue;
  17.  
  18.    public TimerQueue() {
  19.       Toolkit.getDefaultToolkit();
  20.       this.start();
  21.    }
  22.  
  23.    public static TimerQueue sharedInstance() {
  24.       Class var1 = class$com$sun$java$swing$TimerQueue != null ? class$com$sun$java$swing$TimerQueue : (class$com$sun$java$swing$TimerQueue = class$("com.sun.java.swing.TimerQueue"));
  25.       synchronized(var1){}
  26.  
  27.       TimerQueue var0;
  28.       try {
  29.          TimerQueue var3 = (TimerQueue)SwingUtilities.appContextGet(sharedInstanceKey);
  30.          if (var3 == null) {
  31.             var3 = new TimerQueue();
  32.             SwingUtilities.appContextPut(sharedInstanceKey, var3);
  33.          }
  34.  
  35.          var0 = var3;
  36.       } catch (Throwable var5) {
  37.          throw var5;
  38.       }
  39.  
  40.       return var0;
  41.    }
  42.  
  43.    synchronized void start() {
  44.       if (this.running) {
  45.          throw new RuntimeException("Can't start a TimerQueue that is already running");
  46.       } else {
  47.          Thread var1 = new Thread(this, "TimerQueue");
  48.  
  49.          try {
  50.             if (var1.getPriority() > 1) {
  51.                var1.setPriority(var1.getPriority() - 1);
  52.             }
  53.  
  54.             var1.setDaemon(true);
  55.          } catch (SecurityException var2) {
  56.          }
  57.  
  58.          var1.start();
  59.          this.running = true;
  60.       }
  61.    }
  62.  
  63.    synchronized void stop() {
  64.       this.running = false;
  65.       this.notify();
  66.    }
  67.  
  68.    synchronized void addTimer(Timer var1, long var2) {
  69.       if (!var1.running) {
  70.          Timer var4 = null;
  71.  
  72.          Timer var5;
  73.          for(var5 = this.firstTimer; var5 != null && var5.expirationTime <= var2; var5 = var5.nextTimer) {
  74.             var4 = var5;
  75.          }
  76.  
  77.          if (var4 == null) {
  78.             this.firstTimer = var1;
  79.          } else {
  80.             var4.nextTimer = var1;
  81.          }
  82.  
  83.          var1.expirationTime = var2;
  84.          var1.nextTimer = var5;
  85.          var1.running = true;
  86.          this.notify();
  87.       }
  88.    }
  89.  
  90.    synchronized void removeTimer(Timer var1) {
  91.       if (var1.running) {
  92.          Timer var3 = null;
  93.          Timer var4 = this.firstTimer;
  94.  
  95.          boolean var2;
  96.          for(var2 = false; var4 != null; var4 = var4.nextTimer) {
  97.             if (var4 == var1) {
  98.                var2 = true;
  99.                break;
  100.             }
  101.  
  102.             var3 = var4;
  103.          }
  104.  
  105.          if (var2) {
  106.             if (var3 == null) {
  107.                this.firstTimer = var1.nextTimer;
  108.             } else {
  109.                var3.nextTimer = var1.nextTimer;
  110.             }
  111.  
  112.             var1.expirationTime = 0L;
  113.             var1.nextTimer = null;
  114.             var1.running = false;
  115.          }
  116.       }
  117.    }
  118.  
  119.    synchronized boolean containsTimer(Timer var1) {
  120.       return var1.running;
  121.    }
  122.  
  123.    synchronized long postExpiredTimers() {
  124.       long var3;
  125.       do {
  126.          Timer var5 = this.firstTimer;
  127.          if (var5 == null) {
  128.             return 0L;
  129.          }
  130.  
  131.          long var1 = System.currentTimeMillis();
  132.          var3 = var5.expirationTime - var1;
  133.          if (var3 <= 0L) {
  134.             if (timerPanels != null) {
  135.                TimerPanel var6 = getActiveTimerPanel();
  136.                if (var6 != null) {
  137.                   Vector var7 = getExpiredTimers();
  138.                   synchronized(var7){}
  139.  
  140.                   try {
  141.                      var7.addElement(var5);
  142.                   } catch (Throwable var14) {
  143.                      throw var14;
  144.                   }
  145.  
  146.                   ((Component)var6).repaint();
  147.                }
  148.             } else {
  149.                try {
  150.                   var5.post();
  151.                } catch (SecurityException var13) {
  152.                }
  153.             }
  154.  
  155.             this.removeTimer(var5);
  156.             if (var5.isRepeats()) {
  157.                this.addTimer(var5, var1 + (long)var5.getDelay());
  158.             }
  159.  
  160.             try {
  161.                this.wait(1L);
  162.             } catch (InterruptedException var12) {
  163.             }
  164.          }
  165.       } while(var3 <= 0L);
  166.  
  167.       return var3;
  168.    }
  169.  
  170.    public synchronized void run() {
  171.       while(this.running) {
  172.          long var1 = this.postExpiredTimers();
  173.  
  174.          try {
  175.             this.wait(var1);
  176.          } catch (InterruptedException var3) {
  177.          }
  178.       }
  179.  
  180.    }
  181.  
  182.    public synchronized String toString() {
  183.       StringBuffer var1 = new StringBuffer();
  184.       var1.append("TimerQueue (");
  185.       Timer var2 = this.firstTimer;
  186.  
  187.       while(var2 != null) {
  188.          var1.append(var2.toString());
  189.          var2 = var2.nextTimer;
  190.          if (var2 != null) {
  191.             var1.append(", ");
  192.          }
  193.       }
  194.  
  195.       var1.append(")");
  196.       return var1.toString();
  197.    }
  198.  
  199.    static synchronized void initAppletTimer(JApplet var0) {
  200.       Hashtable var1 = getTimerPanels();
  201.       TimerPanel var2 = (TimerPanel)var1.get(var0);
  202.       if (var2 == null) {
  203.          var2 = new TimerPanel();
  204.          var0.getLayeredPane().add(var2);
  205.          var1.put(var0, var2);
  206.       }
  207.  
  208.    }
  209.  
  210.    static synchronized void removeAppletTimer(JApplet var0) {
  211.       getTimerPanels().remove(var0);
  212.    }
  213.  
  214.    static synchronized TimerPanel getActiveTimerPanel() {
  215.       Enumeration var0 = getTimerPanels().elements();
  216.  
  217.       while(var0.hasMoreElements()) {
  218.          TimerPanel var1 = (TimerPanel)var0.nextElement();
  219.          if (((Component)var1).isShowing()) {
  220.             return var1;
  221.          }
  222.       }
  223.  
  224.       return null;
  225.    }
  226.  
  227.    static Hashtable getTimerPanels() {
  228.       if (timerPanels == null) {
  229.          timerPanels = new Hashtable(2);
  230.       }
  231.  
  232.       return timerPanels;
  233.    }
  234.  
  235.    static Vector getExpiredTimers() {
  236.       Vector var0 = (Vector)SwingUtilities.appContextGet(expiredTimersKey);
  237.       if (var0 == null) {
  238.          var0 = new Vector();
  239.          SwingUtilities.appContextPut(expiredTimersKey, var0);
  240.       }
  241.  
  242.       return var0;
  243.    }
  244.  
  245.    // $FF: synthetic method
  246.    static Class class$(String var0) {
  247.       try {
  248.          return Class.forName(var0);
  249.       } catch (ClassNotFoundException var2) {
  250.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  251.       }
  252.    }
  253.  
  254.    // $FF: synthetic method
  255.    static Object access$0() {
  256.       return expiredTimersKey;
  257.    }
  258. }
  259.