try {
// do something
}
catch (Throwable t) {
}
但是在 Java 中是否有一种方法可以让我在异常发生时调用特定的方法,而不是编写一个类似上面的 catch-all 方法?
具体来说,当抛出异常(未被应用程序逻辑处理)时,我想在我的 Swing 应用程序中显示一个用户友好的消息。
谢谢。
try {
// do something
}
catch (Throwable t) {
}
但是在 Java 中是否有一种方法可以让我在异常发生时调用特定的方法,而不是编写一个类似上面的 catch-all 方法?
具体来说,当抛出异常(未被应用程序逻辑处理)时,我想在我的 Swing 应用程序中显示一个用户友好的消息。
谢谢。
By default, the JVM handles uncaught exceptions by printing the stack-trace to System.err stream. Java allows us to customize this behavior by providing our own routine which implements Thread.UncaughtExceptionHandler
interface.
Take a look at this blog article which I wrote sometime back which explains this in detail ( http://blog.yohanliyanage.com/2010/09/know-the-jvm-1-uncaught-exception-handler/ ).
In summary, all you have to do is write your custom logic as below :
public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
public void uncaughtException(Thread t, Throwable e) {
// Write the custom logic here
}
}
And set it using any of the three options I have described in the above link. For example, you could do the following to set the default handler for the entire JVM (so any uncaught exception thrown will be handled by this handler).
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler() );
try {
// do something
methodWithException();
}
catch (Throwable t) {
showMessage(t);
}
}//end business method
private void showMessage(Throwable t){
/* logging the stacktrace of exception
* if it's a web application, you can handle the message in an Object: es in Struts you can use ActionError
* if it's a desktop app, you can show a popup
* etc., etc.
*/
}
catch
块中显示友好的消息。getStackTrace()
。catch (Throwable t) {
StackTraceElement[] trace = t.getStackTrace();
//trace[trace.length-1].getMethodName() should contain the method name inside the try
}
顺便提一下,在编程中不建议捕获 Throwable 异常