home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / netscape / application / EventLoop.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-12  |  3.9 KB  |  210 lines

  1. package netscape.application;
  2.  
  3. import netscape.util.InconsistencyException;
  4. import netscape.util.Vector;
  5.  
  6. public class EventLoop implements Runnable {
  7.    Vector events = new Vector();
  8.    Thread mainThread;
  9.    private boolean shouldRun = false;
  10.    static boolean letAwtThreadRun = true;
  11.  
  12.    public void addEvent(Event var1) {
  13.       Vector var2 = this.events;
  14.       synchronized(var2){}
  15.  
  16.       try {
  17.          this.events.addElement(var1);
  18.          this.events.notify();
  19.       } catch (Throwable var4) {
  20.          throw var4;
  21.       }
  22.  
  23.    }
  24.  
  25.    final void letAWTThreadRun() {
  26.       if (letAwtThreadRun) {
  27.          if (this.shouldProcessSynchronously()) {
  28.             Thread var1 = Thread.currentThread();
  29.             int var2 = var1.getPriority();
  30.             int var3 = var2 - 1;
  31.             if (var3 < 1) {
  32.                var3 = 1;
  33.             }
  34.  
  35.             try {
  36.                var1.setPriority(var3);
  37.                Thread.yield();
  38.                var1.setPriority(var2);
  39.             } catch (SecurityException var4) {
  40.                letAwtThreadRun = false;
  41.             }
  42.          }
  43.       }
  44.    }
  45.  
  46.    public void removeEvent(Event var1) {
  47.       Vector var2 = this.events;
  48.       synchronized(var2){}
  49.  
  50.       try {
  51.          this.events.removeElement(var1);
  52.       } catch (Throwable var4) {
  53.          throw var4;
  54.       }
  55.  
  56.    }
  57.  
  58.    public Object filterEvents(EventFilter var1) {
  59.       this.letAWTThreadRun();
  60.       Vector var3 = this.events;
  61.       synchronized(var3){}
  62.  
  63.       Object var2;
  64.       try {
  65.          var2 = var1.filterEvents(this.events);
  66.          this.events.notify();
  67.       } catch (Throwable var5) {
  68.          throw var5;
  69.       }
  70.  
  71.       return var2;
  72.    }
  73.  
  74.    public Event getNextEvent() {
  75.       Object var1 = null;
  76.       Vector var2 = this.events;
  77.       synchronized(var2){}
  78.  
  79.       try {
  80.          while(this.events.count() == 0) {
  81.             try {
  82.                this.events.wait();
  83.             } catch (InterruptedException var5) {
  84.             }
  85.          }
  86.  
  87.          var7 = (Event)this.events.removeFirstElement();
  88.       } catch (Throwable var6) {
  89.          throw var6;
  90.       }
  91.  
  92.       return var7;
  93.    }
  94.  
  95.    public Event peekNextEvent() {
  96.       this.letAWTThreadRun();
  97.       Vector var2 = this.events;
  98.       synchronized(var2){}
  99.  
  100.       Event var1;
  101.       try {
  102.          var1 = (Event)this.events.firstElement();
  103.       } catch (Throwable var4) {
  104.          throw var4;
  105.       }
  106.  
  107.       return var1;
  108.    }
  109.  
  110.    public void processEvent(Event var1) {
  111.       Object var2 = var1.synchronousLock();
  112.       Application var3 = Application.application();
  113.       var3.willProcessInternalEvent(var1);
  114.       var3.willProcessEvent(var1);
  115.       var1.processor().processEvent(var1);
  116.       if (var2 != null) {
  117.          synchronized(var2){}
  118.  
  119.          try {
  120.             var1.clearSynchronousLock();
  121.             var2.notify();
  122.          } catch (Throwable var6) {
  123.             throw var6;
  124.          }
  125.       }
  126.  
  127.       var3.didProcessEvent(var1);
  128.       var3.didProcessInternalEvent(var1);
  129.    }
  130.  
  131.    public void run() {
  132.       synchronized(this){}
  133.  
  134.       try {
  135.          if (this.mainThread != null) {
  136.             throw new InconsistencyException("Only one thread may run an EventLoop");
  137.          }
  138.  
  139.          this.mainThread = Thread.currentThread();
  140.          this.shouldRun = true;
  141.       } catch (Throwable var11) {
  142.          throw var11;
  143.       }
  144.  
  145.       while(this.shouldRun) {
  146.          Event var1 = this.getNextEvent();
  147.          if (this.shouldRun) {
  148.             try {
  149.                this.processEvent(var1);
  150.             } catch (Exception var10) {
  151.                System.err.println(Application.application().exceptionHeader());
  152.                ((Throwable)var10).printStackTrace(System.err);
  153.                System.err.println("Restarting EventLoop.");
  154.             }
  155.          }
  156.       }
  157.  
  158.       synchronized(this){}
  159.  
  160.       try {
  161.          this.mainThread = null;
  162.       } catch (Throwable var9) {
  163.          throw var9;
  164.       }
  165.  
  166.    }
  167.  
  168.    public synchronized void stopRunning() {
  169.       ApplicationEvent var1 = new ApplicationEvent();
  170.       this.shouldRun = false;
  171.       var1.type = -25;
  172.       this.addEvent(var1);
  173.    }
  174.  
  175.    public synchronized boolean isRunning() {
  176.       return this.shouldRun;
  177.    }
  178.  
  179.    synchronized boolean shouldProcessSynchronously() {
  180.       return this.mainThread == null || Thread.currentThread() == this.mainThread;
  181.    }
  182.  
  183.    public void addEventAndWait(Event var1) {
  184.       if (Thread.currentThread() == this.mainThread) {
  185.          throw new InconsistencyException("Can't call addEventAndWait from within the EventLoop's main thread");
  186.       } else {
  187.          Object var2 = var1.createSynchronousLock();
  188.          synchronized(var2){}
  189.  
  190.          try {
  191.             this.addEvent(var1);
  192.  
  193.             while(var1.synchronousLock() != null) {
  194.                try {
  195.                   var2.wait();
  196.                } catch (InterruptedException var6) {
  197.                }
  198.             }
  199.          } catch (Throwable var7) {
  200.             throw var7;
  201.          }
  202.  
  203.       }
  204.    }
  205.  
  206.    public synchronized String toString() {
  207.       return this.events.toString();
  208.    }
  209. }
  210.