This week's book giveaway is in the Mac OS forum. We're giving away four copies of a choice of "Take Control of Upgrading to Yosemite" or "Take Control of Automating Your Mac" and have Joe Kissell on-line! See this thread for details.
You need to use java.awt.Image (or the equivalent, look up in the javadocs). Notably, if you are running under *nix wihout an X session open you will need to specify headless execution on the commandline or it will get crnaky. -Brian
The java.awt.Image API explains why -1 is returned. This API is actually rather tricky - it's asynchronous. This means that you can (and often do) get an Image object that's not yet fully loaded. Methods like getHeight() may return -1 to indicate that the height() data is not yet available - try again later. The class was designed this way because frequently you might be downloading images from a slow source, and you have the option to use those parts of the image data that are available, as they become available, rather than waiting for the whole thing. (A typical example - if you're laying out a web page, you can set aside space for an image once you know it's height and width - even though you can't display the image yet.) Anyway, in order to use Image effectively you typically have to make use of the ImageObserver class to create an object that will notify you when the data you need is loaded. Here's a class I made some time ago to do this: