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