home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / sun / awt / ScreenUpdater.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  2.8 KB  |  130 lines

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