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;
}
}