1 /* 2 * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.applet; 27 28 import java.awt.Toolkit; 29 import java.awt.Image; 30 import java.lang.ref.SoftReference; 31 import sun.awt.image.URLImageSource; 32 import java.net.URL; 33 34 class AppletImageRef { 35 private SoftReference<Image> soft = null; 36 37 URL url; 38 39 /** 40 * Returns a pointer to the object referenced by this Ref. If the object 41 * has been thrown away by the garbage collector, it will be 42 * reconstituted. This method does everything necessary to ensure that the garbage 43 * collector throws things away in Least Recently Used(LRU) order. Applications should 44 * never override this method. The get() method effectively caches calls to 45 * reconstitute(). 46 */ 47 public synchronized Image get() { 48 Image t = check(); 49 if (t == null) { 50 t = reconstitute(); 51 setThing(t); 52 } 53 return t; 54 } 55 56 /** 57 * Create the Ref 58 */ 59 AppletImageRef(URL url) { 60 this.url = url; 61 } 62 63 /** 64 * Flushes the cached object. Forces the next invocation of get() to 65 * invoke reconstitute(). 66 */ 67 public synchronized void flush() { 68 SoftReference s = soft; 69 if (s != null) s.clear(); 70 soft = null; 71 } 72 73 /** 74 * Sets the thing to the specified object. 75 * @param thing the specified object 76 */ 77 public synchronized void setThing(Object thing) { 78 flush(); 79 soft = new SoftReference(thing); 80 } 81 82 /** 83 * Checks to see what object is being pointed at by this Ref and returns it. 84 */ 85 public synchronized Image check() { 86 SoftReference<Image> s = soft; 87 if (s == null) return null; 88 return s.get(); 89 } 90 91 /** 92 * Reconsitute the image. Only called when the ref has been flushed. 93 */ 94 public Image reconstitute() { 95 Image img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(url)); 96 return img; 97 } 98 }