メイン スレッドとは異なるスレッドからチェックされていない例外がスローされたときに、Eclipse のコンソールでスタック トレースを表示できないのはなぜですか?
例えば:
ScheduledThreadPoolExecutor scheduledExecutor;
scheduledExecutor.scheduleAtFixedRate(new Log(), 0, LOGGING_FREQUENCY_MS, TimeUnit.MILLISECONDS);
public class Log implements Runnable {
public void run() {
//NullPointerException is thrown
}
}
出力がありません。しかし、もしそうなら:
ScheduledThreadPoolExecutor scheduledExecutor;
scheduledExecutor.scheduleAtFixedRate(new Log(), 0, LOGGING_FREQUENCY_MS, TimeUnit.MILLISECONDS);
public class Log implements Runnable {
public void run() {
try {
//NullPointerException is thrown
}catch(Exception e){
e.printStackTrace();
}
}
}
スタック トレースが表示されます。
なんで?
編集:フォローアップの質問: スレッドプール スレッドによってスローされた例外を出力する最も簡単な方法は何ですか? もちろん、すべての Runnable に try-catch を追加するのは本当に見苦しいものです。