I've been doing a lot of work with Java and images on MacOS lately, and I thought I'd share a Java method I use to get an image off the clipboard. I won't get into the details of working with an Image or a BufferedImage in this tutorial, but I will show you how to get the Image off the clipboard. (I will share a lot more about how to work with images in Java/Swing applications in other tutorials.)
Here's the Java source code for my method that gets an Image from the system clipboard:
/**
* Get an image off the system clipboard.
* @return Returns an Image if successful; otherwise returns null.
*/
public Image getImageFromClipboard()
{
Transferable transferable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
if (transferable != null && transferable.isDataFlavorSupported(DataFlavor.imageFlavor))
{
try
{
return (Image) transferable.getTransferData(DataFlavor.imageFlavor);
}
catch (UnsupportedFlavorException e)
{
// handle this as desired
e.printStackTrace();
}
catch (IOException e)
{
// handle this as desired
e.printStackTrace();
}
}
return null;
}
As you can see from the comments in the code, that method catches any exceptions that may occur, and then returns a null reference if the method fails for some reason.
I've tested this on Mac OS X 10.5.7 and Java 1.5.x over the last few days, and it works fine for me. You might think that there's a little limit in there where I'm explicitly looking for a DataFlavor.imageFlavor, but in practice this isn't a problem. I'm expecting an image to be on the clipboard when this method is called, so if I get a null when I call this method, I can be pretty sure there wasn't an image on the clipboard to get.
How I call this method
For example, in one of my Java programs I call this getImageFromClipboard method like this:
public void doPasteAction()
{
originalImage = getImageFromClipboard();
// you might want to handle this better in your program
if (originalImage == null) return;
// success, got the image.
// more code here to do the drawing ...
}
As you can see, I call the getImageFromClipboard from a method named doPasteAction, so in my code I am expecting an image to be on the clipboard, but if there isn't one, no big deal, I just bail out of this method.

