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