Better option would be to trap any RuntimeException from user callbacks, and rethrow as a NucleusUserCallbackException (or some name like that), with the RuntimeException nested inside it. Then "throwException" can check for NucleusUserCallbackException.