是否可以将UncaughtExceptionHandler
附加到TimerTask
?
(除了致电Thread.setDefaultUncaughtExceptionHandler()
)
答案 0 :(得分:2)
您可以编写一个TimerTask
代理,从Throwable
抓取run
。
public final class TimerTaskCatcher extends TimerTask {
private final TimerTask orig;
private final Thread.UncaughtExceptionHandler handler;
public TimerTaskCatcher(
TimerTask orig,
Thread.UncaughtExceptionHandler handler
} {
if (orig == null || handler == null) {
throw new NullPointerException();
}
this.orig = orig;
this.handler = handler;
}
@Override public boolean cancel() {
return orig.cancel();
}
@Override public void run() {
try {
orig.run();
} catch (Throwable exc) {
handler.uncaughtException(Thread.currentThread(), exc);
}
}
@Override public long scheduledExecutionTime() {
return orig.scheduledExecutionTime();
}
}
顺便说一句:您可能需要考虑使用java.util.concurrent
代替Timer
。
答案 1 :(得分:0)
是的,我想是的。 Thread
class
中有一个实例方法(setUncaughtExceptionHandler)设置了帖子的UncaughtExceptionHandler
。
在run
的{{1}}方法中,您可以执行以下操作:
TimerTask