That's the problem. InterruptedException is a checked exception. The compiler therefore knows that it cannot possibly be thrown from the try block, so it knows that trying to catch it is an error. Runtime exceptions don't have the same effect (even though in this case theoretically the compiler could work out that ArrayIndexOutOfBoundsException can't be thrown).
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com