2009-04-01 11 views

Antwort

2

können Sie einen TimerTask Proxy schreiben, die Throwable von run abfängt.

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(); 
    } 
} 

BTW: Sie könnten java.util.concurrent statt Timer berücksichtigen wollen verwenden.

0

Ja, ich denke schon. Es gibt eine Instanz-Methode (setUncaughtExceptionHandler) in Threadclass, die die UncaughtExceptionHandler des Threads setzt.

In Ihrem run Methode des TimerTask Sie etwas tun können:

public void run() { 
    Thread.currentThread().setUncaughtExceptionHandler(eh); 
}