src/share/classes/sun/applet/AppletImageRef.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1996, 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 --- 1,7 ---- /* ! * 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
*** 25,54 **** package sun.applet; import java.awt.Toolkit; import java.awt.Image; import sun.awt.image.URLImageSource; import java.net.URL; ! class AppletImageRef extends sun.misc.Ref { URL url; /** * Create the Ref */ AppletImageRef(URL url) { this.url = url; } ! public void flush() { ! super.flush(); } /** * Reconsitute the image. Only called when the ref has been flushed. */ ! public Object reconstitute() { Image img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(url)); return img; } } --- 25,98 ---- 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 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(Object 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; } }