-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
1.4.0, 1.4.1
-
x86
-
windows_2000
Name: jk109818 Date: 11/18/2002
FULL PRODUCT VERSION :
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
--------------
java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)
Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)
FULL OPERATING SYSTEM VERSION :
Microsoft Windows 2000 [Version 5.00.2195]
A DESCRIPTION OF THE PROBLEM :
In attempting to create a scaled instance of an image a NullPointerException is being thrown. This only occurs if the image size chosen has a negative value for width and a very small value for height --- say, 1 or 2, depending on gif file chosen.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Compile ImageErr.java. Make sure to put a gif image in the compiled code directory named "horn.gif"
2. Run the compiled class ImageErr
EXPECTED VERSUS ACTUAL BEHAVIOR :
Expected: a blank JFrame should appear.
Actual: A NullPointerException is thrown on line 25:
temp.setImage(error);
and the program terminates.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.NullPointerException
at sun.awt.image.OffScreenImageSource.sendPixels(OffScreenImageSource.java:102)
at sun.awt.image.OffScreenImageSource.produce(OffScreenImageSource.java:161)
at sun.awt.image.OffScreenImageSource.addConsumer(OffScreenImageSource.java:37)
at sun.awt.image.OffScreenImageSource.startProduction(OffScreenImageSource.java:51)
at java.awt.image.FilteredImageSource.startProduction(FilteredImageSource.java:116)
at sun.awt.image.ImageRepresentation.startProduction(ImageRepresentation.java:644)
at sun.awt.image.ImageRepresentation.prepare(ImageRepresentation.java:682)
at sun.awt.windows.WToolkit.prepareScrImage(WToolkit.java:488)
at sun.awt.windows.WToolkit.prepareImage(WToolkit.java:511)
at java.awt.Component.prepareImage(Component.java:2682)
at java.awt.ImageMediaEntry.startLoad(MediaTracker.java:886)
at java.awt.MediaEntry.getStatus(MediaTracker.java:831)
at java.awt.ImageMediaEntry.getStatus(MediaTracker.java:882)
at java.awt.MediaTracker.statusID(MediaTracker.java:669)
at java.awt.MediaTracker.waitForID(MediaTracker.java:617)
at javax.swing.ImageIcon.loadImage(ImageIcon.java:232)
at javax.swing.ImageIcon.setImage(ImageIcon.java:278)
at ImageErr.<init>(ImageErr.java:25)
at ImageErr.main(ImageErr.java:30)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ImageErr extends JFrame {
public ImageErr() {
super();
ImageIcon temp = new ImageIcon("horn.gif");
JButton button = new JButton(temp);
Image image = temp.getImage();
BufferedImage bufferedImage = new BufferedImage(image.getWidth(button), image.getHeight(button), BufferedImage.TYPE_INT_ARGB);
Graphics g = bufferedImage.getGraphics();
g.drawImage(image, 0, 0, null);
Image error = bufferedImage.getScaledInstance(-1, 1, Image.SCALE_DEFAULT);
if (error != null) {
temp.setImage(error);
}
}
public static void main(String args[]) {
ImageErr err = new ImageErr();
err.setBounds(0, 0, 400, 400);
err.setVisible(true);
}
}
---------- END SOURCE ----------
CUSTOMER WORKAROUND :
This is the interesting part. If a height value greater than 1 or 2 (depending on gif file) is used in getScaledInstance call, then the code works properly.
(Review ID: 160363)
======================================================================
FULL PRODUCT VERSION :
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
--------------
java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)
Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)
FULL OPERATING SYSTEM VERSION :
Microsoft Windows 2000 [Version 5.00.2195]
A DESCRIPTION OF THE PROBLEM :
In attempting to create a scaled instance of an image a NullPointerException is being thrown. This only occurs if the image size chosen has a negative value for width and a very small value for height --- say, 1 or 2, depending on gif file chosen.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Compile ImageErr.java. Make sure to put a gif image in the compiled code directory named "horn.gif"
2. Run the compiled class ImageErr
EXPECTED VERSUS ACTUAL BEHAVIOR :
Expected: a blank JFrame should appear.
Actual: A NullPointerException is thrown on line 25:
temp.setImage(error);
and the program terminates.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.NullPointerException
at sun.awt.image.OffScreenImageSource.sendPixels(OffScreenImageSource.java:102)
at sun.awt.image.OffScreenImageSource.produce(OffScreenImageSource.java:161)
at sun.awt.image.OffScreenImageSource.addConsumer(OffScreenImageSource.java:37)
at sun.awt.image.OffScreenImageSource.startProduction(OffScreenImageSource.java:51)
at java.awt.image.FilteredImageSource.startProduction(FilteredImageSource.java:116)
at sun.awt.image.ImageRepresentation.startProduction(ImageRepresentation.java:644)
at sun.awt.image.ImageRepresentation.prepare(ImageRepresentation.java:682)
at sun.awt.windows.WToolkit.prepareScrImage(WToolkit.java:488)
at sun.awt.windows.WToolkit.prepareImage(WToolkit.java:511)
at java.awt.Component.prepareImage(Component.java:2682)
at java.awt.ImageMediaEntry.startLoad(MediaTracker.java:886)
at java.awt.MediaEntry.getStatus(MediaTracker.java:831)
at java.awt.ImageMediaEntry.getStatus(MediaTracker.java:882)
at java.awt.MediaTracker.statusID(MediaTracker.java:669)
at java.awt.MediaTracker.waitForID(MediaTracker.java:617)
at javax.swing.ImageIcon.loadImage(ImageIcon.java:232)
at javax.swing.ImageIcon.setImage(ImageIcon.java:278)
at ImageErr.<init>(ImageErr.java:25)
at ImageErr.main(ImageErr.java:30)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ImageErr extends JFrame {
public ImageErr() {
super();
ImageIcon temp = new ImageIcon("horn.gif");
JButton button = new JButton(temp);
Image image = temp.getImage();
BufferedImage bufferedImage = new BufferedImage(image.getWidth(button), image.getHeight(button), BufferedImage.TYPE_INT_ARGB);
Graphics g = bufferedImage.getGraphics();
g.drawImage(image, 0, 0, null);
Image error = bufferedImage.getScaledInstance(-1, 1, Image.SCALE_DEFAULT);
if (error != null) {
temp.setImage(error);
}
}
public static void main(String args[]) {
ImageErr err = new ImageErr();
err.setBounds(0, 0, 400, 400);
err.setVisible(true);
}
}
---------- END SOURCE ----------
CUSTOMER WORKAROUND :
This is the interesting part. If a height value greater than 1 or 2 (depending on gif file) is used in getScaledInstance call, then the code works properly.
(Review ID: 160363)
======================================================================
- duplicates
-
JDK-4905411 Cropping a BufferedImage image to 0 size causes NullPointerException
-
- Resolved
-