aboutsummaryrefslogtreecommitdiff
path: root/libjava/gnu/java/awt/image/ImageDecoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/java/awt/image/ImageDecoder.java')
-rw-r--r--libjava/gnu/java/awt/image/ImageDecoder.java42
1 files changed, 30 insertions, 12 deletions
diff --git a/libjava/gnu/java/awt/image/ImageDecoder.java b/libjava/gnu/java/awt/image/ImageDecoder.java
index 233dfb1b28d..d279d567467 100644
--- a/libjava/gnu/java/awt/image/ImageDecoder.java
+++ b/libjava/gnu/java/awt/image/ImageDecoder.java
@@ -74,6 +74,11 @@ public abstract class ImageDecoder implements ImageProducer
this.url = url;
}
+ public ImageDecoder (InputStream is)
+ {
+ this.input = is;
+ }
+
public ImageDecoder (byte[] imagedata, int imageoffset, int imagelength)
{
data = imagedata;
@@ -99,7 +104,7 @@ public abstract class ImageDecoder implements ImageProducer
public void startProduction (ImageConsumer ic)
{
if (!isConsumer(ic))
- addConsumer (ic);
+ addConsumer(ic);
Vector list = (Vector) consumers.clone ();
try
@@ -108,17 +113,30 @@ public abstract class ImageDecoder implements ImageProducer
// ImageDecoder constructors so that exceptions cause
// imageComplete to be called with an appropriate error
// status.
- if (url != null)
- input = url.openStream();
- else
- {
- if (filename != null)
- input = new FileInputStream (filename);
- else
- input = new ByteArrayInputStream (data, offset, length);
- }
-
- produce (list, input);
+ if (input == null)
+ {
+ try
+ {
+ if (url != null)
+ input = url.openStream();
+ else
+ {
+ if (filename != null)
+ input = new FileInputStream (filename);
+ else
+ input = new ByteArrayInputStream (data, offset, length);
+ }
+ produce (list, input);
+ }
+ finally
+ {
+ input = null;
+ }
+ }
+ else
+ {
+ produce (list, input);
+ }
}
catch (Exception e)
{