Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Image object getWidth() and getHeight() returning -1

796280Aug 11 2010 — edited Aug 12 2010
Hello all,

I'm currently unit testing a pretty simple utility that calculates a new image position, given a handful of parameters (including image width and height).

The problem I'm running into is this:
The image width/height don't always load immediately. My only clue so far from searching the web is this:
http://download-llnw.oracle.com/javase/6/docs/api/java/awt/Image.html#getWidth%28java.awt.image.ImageObserver%29
which states
Determines the width of the image. If the width is not yet known, this method returns -1 and the specified ImageObserver object is notified later. 
In my JUnit test harness, I have the following code to load my images, using Toolkit:
public static final String TEST_IMG_1_PATH = "images/apple_logo.png";
public static final String TEST_IMG_2_PATH = "images/dude.png";
private Image testImage1, testImage2;
	
@Before
public void setUp() throws Exception {
	testImage1 = Toolkit.getDefaultToolkit().getImage(TEST_IMG_1_PATH);
	testImage2 = Toolkit.getDefaultToolkit().getImage(TEST_IMG_2_PATH);
	
	// check the image size to see if they are fully loaded:
	System.out.println(testImage1.getWidth(null));
	System.out.println(testImage1.getHeight(null));
	System.out.println(testImage2.getWidth(null));
	System.out.println(testImage2.getHeight(null));
}
Because the utility method I'm testing heavily depends on the image size, my tests intermittently fail. When I run this, I typically get -1 for all of the image dimension checks (see the above println()s).
-1
-1
-1
-1
Even with these "-1" results, my test still passes... which means at some point before the test assert() statement executes, the images do become fully loaded.

My question is: What can I do to make sure my image is loaded fully before I do anything with it? Is there any elegant way to handle this? Am I doing something wrong?

Thanks for your time.
-Thok

Comments

Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Sep 9 2010
Added on Aug 11 2010
2 comments
1,599 views