| /* |
| * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. Oracle designates this |
| * particular file as subject to the "Classpath" exception as provided |
| * by Oracle in the LICENSE file that accompanied this code. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| |
| package sun.applet; |
| |
| import java.awt.Toolkit; |
| import java.awt.Image; |
| import java.lang.ref.SoftReference; |
| import sun.awt.image.URLImageSource; |
| import java.net.URL; |
| |
| class AppletImageRef { |
| private SoftReference<Image> soft = null; |
| |
| URL url; |
| |
| /** |
| * Returns a pointer to the object referenced by this Ref. If the object |
| * has been thrown away by the garbage collector, it will be |
| * reconstituted. This method does everything necessary to ensure that the garbage |
| * collector throws things away in Least Recently Used(LRU) order. Applications should |
| * never override this method. The get() method effectively caches calls to |
| * reconstitute(). |
| */ |
| public synchronized Image get() { |
| Image t = check(); |
| if (t == null) { |
| t = reconstitute(); |
| setThing(t); |
| } |
| return t; |
| } |
| |
| /** |
| * Create the Ref |
| */ |
| AppletImageRef(URL url) { |
| this.url = url; |
| } |
| |
| /** |
| * Flushes the cached object. Forces the next invocation of get() to |
| * invoke reconstitute(). |
| */ |
| public synchronized void flush() { |
| SoftReference<Image> s = soft; |
| if (s != null) s.clear(); |
| soft = null; |
| } |
| |
| /** |
| * Sets the thing to the specified object. |
| * @param thing the specified object |
| */ |
| public synchronized void setThing(Image thing) { |
| flush(); |
| soft = new SoftReference<>(thing); |
| } |
| |
| /** |
| * Checks to see what object is being pointed at by this Ref and returns it. |
| */ |
| public synchronized Image check() { |
| SoftReference<Image> s = soft; |
| if (s == null) return null; |
| return s.get(); |
| } |
| |
| /** |
| * Reconsitute the image. Only called when the ref has been flushed. |
| */ |
| public Image reconstitute() { |
| Image img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(url)); |
| return img; |
| } |
| } |