首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UncaughtExceptionHandler附加到TimerTask

将UncaughtExceptionHandler附加到TimerTask
EN

Stack Overflow用户
提问于 2009-04-01 15:08:41
回答 2查看 1.2K关注 0票数 1

是否可以将UncaughtExceptionHandler连接到TimerTask

(不是通过调用Thread.setDefaultUncaughtExceptionHandler())

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-01 15:19:05

您可以编写一个从run捕获ThrowableTimerTask代理。

代码语言:javascript
复制
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() {
        // **Edit:** Correction report due to @Discape.
        // In fact, this entire method could be elided.
        boolean weirdResult;
        try {
            orig.cancel();
        } finally {
            weirdResult = super.cancel();
        }
        return weirdResult;
    }
    @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

票数 2
EN

Stack Overflow用户

发布于 2009-04-01 15:23:39

我想可以。有一个实例方法( Thread class中的setUncaughtExceptionHandler)设置了线程的UncaughtExceptionHandler

TimerTaskrun方法中,您可以执行以下操作:

代码语言:javascript
复制
public void run() {
    Thread.currentThread().setUncaughtExceptionHandler(eh);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/705988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档