src/demo/share/jfc/J2Ddemo/java2d/DemoImages.java
changeset 50146 0bb0e464ee76
equal deleted inserted replaced
50145:752645a158ff 50146:0bb0e464ee76
       
     1 /*
       
     2  *
       
     3  * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
       
     4  *
       
     5  * Redistribution and use in source and binary forms, with or without
       
     6  * modification, are permitted provided that the following conditions
       
     7  * are met:
       
     8  *
       
     9  *   - Redistributions of source code must retain the above copyright
       
    10  *     notice, this list of conditions and the following disclaimer.
       
    11  *
       
    12  *   - Redistributions in binary form must reproduce the above copyright
       
    13  *     notice, this list of conditions and the following disclaimer in the
       
    14  *     documentation and/or other materials provided with the distribution.
       
    15  *
       
    16  *   - Neither the name of Oracle nor the names of its
       
    17  *     contributors may be used to endorse or promote products derived
       
    18  *     from this software without specific prior written permission.
       
    19  *
       
    20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
       
    21  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
       
    22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       
    23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
       
    24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
       
    25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
       
    26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
       
    27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
       
    28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
       
    29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
       
    30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    31  */
       
    32 package java2d;
       
    33 
       
    34 
       
    35 import java.awt.Component;
       
    36 import java.awt.Image;
       
    37 import java.awt.MediaTracker;
       
    38 import java.net.URL;
       
    39 import java.util.Map;
       
    40 import java.util.concurrent.ConcurrentHashMap;
       
    41 import java.util.logging.Level;
       
    42 import java.util.logging.Logger;
       
    43 
       
    44 
       
    45 /**
       
    46  * A collection of all the demo images found in the images directory.
       
    47  * Certain classes are preloaded; the rest are loaded lazily.
       
    48  */
       
    49 @SuppressWarnings("serial")
       
    50 public class DemoImages extends Component {
       
    51 
       
    52     private static final String[] names = {
       
    53         "bld.jpg", "boat.png", "box.png",
       
    54         "boxwave.png", "clouds.jpg", "duke.gif", "duke.running.gif",
       
    55         "dukeplug.png", "fight.png", "globe.png",
       
    56         "jumptojavastrip.png", "magnify.png", "painting.png",
       
    57         "remove.gif", "snooze.png", "star7.gif", "surfing.png",
       
    58         "thumbsup.png", "tip.png", "duke.png", "print.gif",
       
    59         "loop.gif", "looping.gif", "start.gif", "start2.gif",
       
    60         "stop.gif", "stop2.gif", "clone.gif"
       
    61     };
       
    62     private static final Map<String, Image> cache =
       
    63             new ConcurrentHashMap<String, Image>(names.length);
       
    64 
       
    65     private DemoImages() {
       
    66     }
       
    67 
       
    68     public static void newDemoImages() {
       
    69         DemoImages demoImages = new DemoImages();
       
    70         for (String name : names) {
       
    71             cache.put(name, getImage(name, demoImages));
       
    72         }
       
    73     }
       
    74 
       
    75 
       
    76     /*
       
    77      * Gets the named image using the toolkit of the specified component.
       
    78      * Note that this has to work even before we have had a chance to
       
    79      * instantiate DemoImages and preload the cache.
       
    80      */
       
    81     public static Image getImage(String name, Component cmp) {
       
    82         Image img = null;
       
    83         if (cache != null) {
       
    84             if ((img = cache.get(name)) != null) {
       
    85                 return img;
       
    86             }
       
    87         }
       
    88 
       
    89         ClassLoader cl = cmp.getClass().getClassLoader();
       
    90         URL fileLoc = cl.getResource("images/" + name);
       
    91         img = cmp.getToolkit().getImage(fileLoc);
       
    92 
       
    93         MediaTracker tracker = new MediaTracker(cmp);
       
    94         tracker.addImage(img, 0);
       
    95         try {
       
    96             tracker.waitForID(0);
       
    97             if (tracker.isErrorAny()) {
       
    98                 System.out.println("Error loading image " + name);
       
    99             }
       
   100         } catch (Exception ex) {
       
   101             Logger.getLogger(DemoImages.class.getName()).log(Level.SEVERE, null, ex);
       
   102         }
       
   103         return img;
       
   104     }
       
   105 }