I’m working on a cross platform application in Java which currently works nicely on Windows, Linux and MacOS X. I’m trying to work out a nice way to do detection (and handling) of ‘crashes’. Is there an easy, cross-platform way to detect ‘crashes’ in Java and to do something in response?
I guess by ‘crashes’ I mean uncaught exceptions. However the code does use some JNI so it’d be nice to be able to catch crashes from bad JNI code, but I have a feeling that’s JVM specific.
For simple catch-all handling, you can use the following static method in Thread. From the Javadoc:
This is a very broad way to deal with errors or unchecked exceptions that may not be caught anywhere else.
Side-note: It’s better if the code can catch, log and/or recover from exceptions closer to the source of the problem. I would reserve this kind of generalized crash handling for totally unrecoverable situations (i.e. subclasses of java.lang.Error). Try to avoid the possibility of a RuntimeException ever going completely uncaught, since it might be possible–and preferable–for the software to survive that.