我正在创建一些多线程代码,并创建了一个创建线程的JobDispatcher类。我想这个对象来处理的工作线程任何未处理的异常,所以我使用如何在Java中模拟未处理的异常
Thread.setUncaughtExceptionHandler(this);
现在,我想测试此功能 - 我怎么能在的run()方法生成了未处理的异常我的工人对象?
我正在创建一些多线程代码,并创建了一个创建线程的JobDispatcher类。我想这个对象来处理的工作线程任何未处理的异常,所以我使用如何在Java中模拟未处理的异常
Thread.setUncaughtExceptionHandler(this);
现在,我想测试此功能 - 我怎么能在的run()方法生成了未处理的异常我的工人对象?
只抛出任何异常。
例如为:
throw new RuntimeException("Testing unhandled exception processing.");
完成:
public class RuntimeTest
{
public static void main(String[] a)
{
Thread t = new Thread()
{
public void run()
{
throw new RuntimeException("Testing unhandled exception processing.");
}
};
t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{
public void uncaughtException(Thread t, Throwable e)
{
System.err.println(t + "; " + e);
}
});
t.start();
}
}
做什么用只是抛出一个异常的问题:
throw new Exception("This should be unhandled");
内,您的run方法。当然,没有抓住它。它应该触发你的处理程序。
您应该抛出一些未经检查的异常。一个未经检查的异常不需要你的代码来处理它,因此它是一个很好的选择,可以一直沿着调用栈。
您可以选择例如的RuntimeException,甚至像Asse田,如果你想最大限度地减少了代码的某些部分捕获异常,且到达您的处理程序之前处理它的机会。
刚刚加入这样的代码,你会得到未处理的异常没有皮棉错误:
int i = 1/0;
Eclipse将不会让我这样做的时候我编 - 它坚持我与周围的try/catch。你知道如何改变这种行为吗? – 2010-06-14 22:26:22
它应该编译。看起来像一些Eclipse特定的额外支票。 – 2010-06-14 22:30:06
Eclipse可能会投诉,如果抛出异常之后在方法中有其他代码,使其成为它所在方法中唯一/最后一行。 – Alb 2010-06-14 22:34:03