This site is currently read-only as we are migrating to Oracle Forums for an improved community experience. You will not be able to initiate activity until January 31st, when you will be able to use this site as normal.

    Forum Stats

  • 3,890,899 Users
  • 2,269,649 Discussions
  • 7,916,821 Comments

Discussions

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

796280
796280 Member Posts: 123
edited Aug 12, 2010 9:21AM in Abstract Window Toolkit (AWT)
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

This discussion has been closed.