Align launcher exception handling with direct invocation of main method

Previously, if an application’s main method threw an exception,
MainMethodRunner would catch the exception and call System.exit(1).
This meant that the JVM would exit, irrespective of whether or not
any non-daemon threads were running. In contrast, when an application’s
main method was invoked directly (in an IDE, for example) the JVM
would not exit if one or more non-daemon threads were running. This
is standard JVM behaviour that we should be consistent with in the
launcher.

This commit updates MainMethodRunner to wrap any exception thrown by an
application’s main method in a RuntimeException and rethrow it. This
alllows the JVM to handle the exception and use its normal rules for
deciding whether or not it should exit.

Closes gh-4984
This commit is contained in:
Andy Wilkinson 2016-01-21 09:57:02 +00:00
parent 9f728b3d59
commit 2dc3660a32

View File

@ -59,10 +59,7 @@ public class MainMethodRunner implements Runnable {
if (handler != null) {
handler.uncaughtException(Thread.currentThread(), ex);
}
else {
ex.printStackTrace();
}
System.exit(1);
throw new RuntimeException(ex);
}
}