This discussion is archived
2 Replies Latest reply: Aug 12, 2010 6:21 AM by 796280 RSS

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

796280 Newbie
Currently Being Moderated
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