How can I detect when an Exception has been thrown anywhere in my application?
I’m try to auto-magically send myself an email whenever an exception is thrown anywhere in my Java Desktop Application. I figure this way I can be more proactive.
I know I could just explicitly log and notify myself whenever an exception occurs, but I’d have to do it everywhere and I might(more likely will) miss a couple.
Any suggestions?
You probobly don’t want to mail on any exception. There are lots of code in the JDK that actaully depend on exceptions to work normally. What I presume you are more inerested in are uncaught exceptions. If you are catching the exceptions you should handle notifications there.
In a desktop app there are two places to worry about this, in the event-dispatch-thread (EDT) and outside of the EDT. Globaly you can register a class implementing
java.util.Thread.UncaughtExceptionHandlerand register it viajava.util.Thread.setDefaultUncaughtExceptionHandler. This will get called if an exception winds down to the bottom of the stack and the thread hasn’t had a handler set on the current thread instance on the thread or the ThreadGroup.The EDT has a different hook for handling exceptions. A system property
'sun.awt.exception.handler'needs to be registerd with the Fully Qualified Class Name of a class with a zero argument constructor. This class needs an instance method handle(Throwable) that does your work. The return type doesn’t matter, and since a new instance is created every time, don’t count on keeping state.So if you don’t care what thread the exception occurred in a sample may look like this:
Add this class into some random package, and then call the
registerExceptionHandlermethod and you should be ready to go.