diff options
Diffstat (limited to 'libjava/gnu/java/awt/image/ImageDecoder.java')
-rw-r--r-- | libjava/gnu/java/awt/image/ImageDecoder.java | 42 |
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) { |