home *** CD-ROM | disk | FTP | other *** search
/ Popular Software (Premium Edition) / mycd.iso / INTERNET / NETSCAP4.06 / CP32E406.EXE / nav40.z / java40.jar / sun / awt / image / ImageFetcher.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-08-13  |  4.3 KB  |  252 lines

  1. package sun.awt.image;
  2.  
  3. import java.util.Vector;
  4.  
  5. class ImageFetcher extends Thread {
  6.    static Thread[] fetchers = null;
  7.    static int numfetchers;
  8.    static int numwaiting;
  9.    static final int HIGH_PRIORITY = 8;
  10.    static final int LOW_PRIORITY = 3;
  11.    static final int ANIM_PRIORITY = 2;
  12.    static final int TIMEOUT = 5000;
  13.    private static Vector waitList = new Vector();
  14.  
  15.    private static ThreadGroup getImageFetcherThreadGroup() {
  16.       ThreadGroup var0;
  17.       for(var0 = Thread.currentThread().getThreadGroup(); var0.getParent() != null && var0.getParent().getParent() != null; var0 = var0.getParent()) {
  18.       }
  19.  
  20.       return var0;
  21.    }
  22.  
  23.    private ImageFetcher(int var1) {
  24.       super(getImageFetcherThreadGroup(), "Image Fetcher " + var1);
  25.       SecurityManager.enablePrivilege("UniversalThreadAccess");
  26.       ((Thread)this).setDaemon(true);
  27.    }
  28.  
  29.    public static void add(ImageFetchable var0) {
  30.       Vector var1 = waitList;
  31.       synchronized(var1){}
  32.  
  33.       try {
  34.          if (!waitList.contains(var0)) {
  35.             waitList.addElement(var0);
  36.             if (numwaiting == 0 && numfetchers < fetchers.length) {
  37.                for(int var3 = 0; var3 < fetchers.length; ++var3) {
  38.                   if (fetchers[var3] == null) {
  39.                      SecurityManager.enablePrivilege("UniversalThreadGroupAccess");
  40.                      fetchers[var3] = new ImageFetcher(var3);
  41.                      SecurityManager.revertPrivilege();
  42.                      fetchers[var3].start();
  43.                      ++numfetchers;
  44.                      break;
  45.                   }
  46.                }
  47.             }
  48.  
  49.             waitList.notify();
  50.          }
  51.       } catch (Throwable var5) {
  52.          throw var5;
  53.       }
  54.  
  55.    }
  56.  
  57.    public static boolean remove(ImageFetchable var0) {
  58.       Vector var2 = waitList;
  59.       synchronized(var2){}
  60.  
  61.       boolean var1;
  62.       try {
  63.          if (!waitList.contains(var0)) {
  64.             return false;
  65.          }
  66.  
  67.          waitList.removeElement(var0);
  68.          var1 = true;
  69.       } catch (Throwable var5) {
  70.          throw var5;
  71.       }
  72.  
  73.       return var1;
  74.    }
  75.  
  76.    public static boolean isFetcher(Thread var0) {
  77.       Vector var2 = waitList;
  78.       synchronized(var2){}
  79.  
  80.       try {
  81.          for(int var4 = 0; var4 < fetchers.length; ++var4) {
  82.             if (fetchers[var4] == var0) {
  83.                boolean var1 = true;
  84.                return var1;
  85.             }
  86.          }
  87.  
  88.          return false;
  89.       } catch (Throwable var6) {
  90.          throw var6;
  91.       }
  92.    }
  93.  
  94.    public static boolean amFetcher() {
  95.       return isFetcher(Thread.currentThread());
  96.    }
  97.  
  98.    private static ImageFetchable nextImage() {
  99.       Vector var1 = waitList;
  100.       synchronized(var1){}
  101.  
  102.       try {
  103.          ImageFetchable var3 = null;
  104.          long var4 = System.currentTimeMillis() + 5000L;
  105.  
  106.          while(var3 == null) {
  107.             while(waitList.size() == 0) {
  108.                long var6 = System.currentTimeMillis();
  109.                if (var6 >= var4) {
  110.                   Object var19 = null;
  111.                   return (ImageFetchable)var19;
  112.                }
  113.  
  114.                try {
  115.                   ++numwaiting;
  116.                   waitList.wait(var4 - var6);
  117.                } catch (InterruptedException var16) {
  118.                   System.err.println("Image Fetcher interrupted!");
  119.                   Object var0 = null;
  120.                   return (ImageFetchable)var0;
  121.                } finally {
  122.                   --numwaiting;
  123.                }
  124.             }
  125.  
  126.             var3 = (ImageFetchable)waitList.elementAt(0);
  127.             waitList.removeElement(var3);
  128.          }
  129.  
  130.          ImageFetchable var20 = var3;
  131.          return var20;
  132.       } catch (Throwable var18) {
  133.          throw var18;
  134.       }
  135.    }
  136.  
  137.    public void run() {
  138.       Thread var1 = Thread.currentThread();
  139.  
  140.       try {
  141.          SecurityManager.enablePrivilege("UniversalConnectWithRedirect");
  142.          this.fetchloop(var1);
  143.       } catch (Exception var19) {
  144.          ((Throwable)var19).printStackTrace();
  145.       } finally {
  146.          Vector var4 = waitList;
  147.          synchronized(var4){}
  148.  
  149.          try {
  150.             for(int var6 = 0; var6 < fetchers.length; ++var6) {
  151.                if (fetchers[var6] == var1) {
  152.                   fetchers[var6] = null;
  153.                   --numfetchers;
  154.                }
  155.             }
  156.          } catch (Throwable var20) {
  157.             throw var20;
  158.          }
  159.  
  160.       }
  161.  
  162.    }
  163.  
  164.    public void fetchloop(Thread var1) {
  165.       for(; isFetcher(var1); stoppingAnimation(var1)) {
  166.          Thread.interrupted();
  167.          SecurityManager.enablePrivilege("UniversalThreadAccess");
  168.          var1.setPriority(8);
  169.          SecurityManager.revertPrivilege();
  170.          ImageFetchable var2 = nextImage();
  171.          if (var2 == null) {
  172.             return;
  173.          }
  174.  
  175.          try {
  176.             var2.doFetch();
  177.          } catch (Exception var4) {
  178.             System.err.println("Uncaught error fetching image:");
  179.             ((Throwable)var4).printStackTrace();
  180.          }
  181.       }
  182.  
  183.    }
  184.  
  185.    public static void startingAnimation() {
  186.       Thread var0 = Thread.currentThread();
  187.       SecurityManager.enablePrivilege("UniversalThreadAccess");
  188.       Vector var1 = waitList;
  189.       synchronized(var1){}
  190.  
  191.       try {
  192.          for(int var3 = 0; var3 < fetchers.length; ++var3) {
  193.             if (fetchers[var3] == var0) {
  194.                fetchers[var3] = null;
  195.                --numfetchers;
  196.                var0.setName("Image Animator " + var3);
  197.                return;
  198.             }
  199.          }
  200.       } catch (Throwable var5) {
  201.          throw var5;
  202.       }
  203.  
  204.       var0.setPriority(2);
  205.       var0.setName("Image Animator");
  206.    }
  207.  
  208.    private static void stoppingAnimation(Thread var0) {
  209.       Vector var1 = waitList;
  210.       synchronized(var1){}
  211.  
  212.       try {
  213.          int var3 = -1;
  214.  
  215.          for(int var4 = 0; var4 < fetchers.length; ++var4) {
  216.             if (fetchers[var4] == var0) {
  217.                return;
  218.             }
  219.  
  220.             if (fetchers[var4] == null) {
  221.                var3 = var4;
  222.             }
  223.          }
  224.  
  225.          if (var3 >= 0) {
  226.             fetchers[var3] = var0;
  227.             ++numfetchers;
  228.             SecurityManager.enablePrivilege("UniversalThreadAccess");
  229.             var0.setName("Image Fetcher " + var3);
  230.          }
  231.       } catch (Throwable var6) {
  232.          throw var6;
  233.       }
  234.    }
  235.  
  236.    static {
  237.       SecurityManager.enablePrivilege("UniversalPropertyRead");
  238.       String var0 = System.getProperty("awt.imagefetchers", "4");
  239.       SecurityManager.revertPrivilege();
  240.       int var1 = Integer.parseInt(var0);
  241.       fetchers = new Thread[var1];
  242.  
  243.       for(int var2 = 0; var2 < fetchers.length; ++var2) {
  244.          SecurityManager.enablePrivilege("UniversalThreadGroupAccess");
  245.          Thread var3 = fetchers[var2] = new ImageFetcher(var2);
  246.          SecurityManager.revertPrivilege();
  247.          var3.start();
  248.       }
  249.  
  250.    }
  251. }
  252.