java - 没有异常输出

标签 java multithreading exception executorservice

为什么这段代码不打印异常堆栈跟踪?

public class Playground {

    /**
     * @param args
     */
    public static void main(String[] args) {
        startThread();
    }

    private static void startThread() {
        ScheduledExecutorService timer = Executors
                .newSingleThreadScheduledExecutor();
        Runnable r = new Runnable() {
            int dummyInt = 0;
            boolean dummyBoolean = false;

            @Override
            public void run() {
                dummyInt = Integer.parseInt("AAAA");

                if (dummyBoolean) {
                    dummyBoolean= false;
                } else {
                    dummyBoolean= true;
                }

            }

        };

        timer.scheduleAtFixedRate(r, 0, 100, TimeUnit.MILLISECONDS);

    }

}

我怎样才能得到它?

我希望看到这个:

java.lang.NumberFormatException: For input string: "AAAA"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at Playground$1.run(Playground.java:25)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

最佳答案

执行器可能在线程上设置了自己的未捕获异常处理程序,因此堆栈跟踪不会打印到控制台。如果在 Runnable 中抛出异常,您可以从 scheduleAtFixedRate 方法返回的 ScheduledFuture 对象中获取它:

ScheduledFuture<?> future = timer.scheduleAtFixedRate(r, 0, 100, TimeUnit.MILLISECONDS);
try {
    future.get();
} catch (ExecutionException e) {
    Throwable cause = e.getCause();
    cause.printStackTrace();
}

关于java - 没有异常输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2459194/

相关文章:

java - 返回响应实体中断流程

visual-studio-2008 - VS2008 (c#) 中是否有一种方法可以查看所有可能源自方法调用甚至整个 try-catch block 的异常类型?

java - 检查 Oracle 数据库性能的工具

WCF 命名管道服务设置

c++ - 多线程环境中的信号处理函数

C++ 线程在结束时删除自身

java - 我们什么时候应该在方法中抛出异常或捕获异常?

java - 通过/作为参数传递方法 - ANDROID

java - 单击按钮时滑入另一个 XML 布局

java - Struts 2 登录表单问题