Is there a way to make Runnable's run() throw an exception?
Solution 1:
You can use a Callable
instead, submitting it to an ExecutorService
and waiting for result with FutureTask.isDone()
returned by the ExecutorService.submit()
.
When isDone()
returns true you call FutureTask.get()
. Now, if your Callable
has thrown an Exception
then FutureTask.get()
wiill throw an Exception
too and the original Exception you will be able to access using Exception.getCause()
.
Solution 2:
If you want to pass a class that implements Runnable
into the Thread
framework, then you have to play by that framework's rules, see Ernest Friedman-Hill's answer why doing it otherwise is a bad idea.
I have a hunch, though, that you want to call run
method directly in your code, so your calling code can process the exception.
The answer to this problem is easy. Do not use Runnable
interface from Thread library, but instead create your own interface with the modified signature that allows checked exception to be thrown, e.g.
public interface MyRunnable
{
void myRun ( ) throws MyException;
}
You may even create an adapter that converts this interface to real Runnable
( by handling checked exception ) suitable for use in Thread framework.