home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 July / PCO_07_97.ISO / NET_COM / cc32e40.exe / nav40.z / java40.jar / sun / awt / ScreenUpdater.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-06-07  |  2.5 KB  |  115 lines

  1. package sun.awt;
  2.  
  3. public class ScreenUpdater extends Thread {
  4.    private final int PRIORITY = 4;
  5.    private ScreenUpdaterEntry first;
  6.    public static final ScreenUpdater updater = newScreenUpdater();
  7.  
  8.    static ThreadGroup findSystemThreadGroup() {
  9.       Thread var0 = Thread.currentThread();
  10.  
  11.       ThreadGroup var1;
  12.       for(var1 = var0.getThreadGroup(); var1 != null && !var1.getName().equals("main"); var1 = var1.getParent()) {
  13.       }
  14.  
  15.       return var1;
  16.    }
  17.  
  18.    static ScreenUpdater newScreenUpdater() {
  19.       SecurityManager.enablePrivilege("SuperUser");
  20.       return new ScreenUpdater(findSystemThreadGroup(), "ScreenUpdater");
  21.    }
  22.  
  23.    private ScreenUpdater(ThreadGroup var1, String var2) {
  24.       super(var1, var2);
  25.       ((Thread)this).start();
  26.    }
  27.  
  28.    private ScreenUpdater() {
  29.       ((Thread)this).start();
  30.    }
  31.  
  32.    private synchronized ScreenUpdaterEntry nextEntry() throws InterruptedException {
  33.       while(true) {
  34.          if (this.first == null) {
  35.             Object var5 = null;
  36.             this.wait();
  37.          } else {
  38.             long var2 = this.first.when - System.currentTimeMillis();
  39.             if (var2 <= 0L) {
  40.                ScreenUpdaterEntry var4 = this.first;
  41.                this.first = this.first.next;
  42.                return var4;
  43.             }
  44.  
  45.             Object var1 = null;
  46.             this.wait(var2);
  47.          }
  48.       }
  49.    }
  50.  
  51.    public void run() {
  52.       SecurityManager.enablePrivilege("SuperUser");
  53.       ((Thread)this).setName("ScreenUpdater");
  54.  
  55.       try {
  56.          while(true) {
  57.             ((Thread)this).setPriority(4);
  58.             ScreenUpdaterEntry var1 = this.nextEntry();
  59.             ((Thread)this).setPriority(var1.client.updatePriority());
  60.  
  61.             try {
  62.                var1.client.updateClient(var1.arg);
  63.             } catch (Throwable var3) {
  64.                var3.printStackTrace();
  65.             }
  66.  
  67.             Object var5 = null;
  68.          }
  69.       } catch (InterruptedException var4) {
  70.       }
  71.    }
  72.  
  73.    public void notify(UpdateClient var1) {
  74.       this.notify(var1, 100L, (Object)null);
  75.    }
  76.  
  77.    public synchronized void notify(UpdateClient var1, long var2) {
  78.       this.notify(var1, var2, (Object)null);
  79.    }
  80.  
  81.    public synchronized void notify(UpdateClient var1, long var2, Object var4) {
  82.       long var5 = System.currentTimeMillis() + var2;
  83.       long var7 = this.first != null ? this.first.when : -1L;
  84.       if (this.first != null) {
  85.          if (this.first.client == var1) {
  86.             var5 = Math.min(this.first.when, var5);
  87.             this.first = this.first.next;
  88.          } else {
  89.             for(ScreenUpdaterEntry var9 = this.first; var9.next != null; var9 = var9.next) {
  90.                if (var9.next.client == var1 && var9.next.arg == var4) {
  91.                   var5 = Math.min(var9.next.when, var5);
  92.                   var9.next = var9.next.next;
  93.                   break;
  94.                }
  95.             }
  96.          }
  97.       }
  98.  
  99.       if (this.first != null && this.first.when <= var5) {
  100.          ScreenUpdaterEntry var10;
  101.          for(var10 = this.first; var10.next != null && var10.next.when <= var5; var10 = var10.next) {
  102.          }
  103.  
  104.          var10.next = new ScreenUpdaterEntry(var1, var5, var4, var10.next);
  105.       } else {
  106.          this.first = new ScreenUpdaterEntry(var1, var5, var4, this.first);
  107.       }
  108.  
  109.       if (var7 != this.first.when) {
  110.          super.notify();
  111.       }
  112.  
  113.    }
  114. }
  115.