无法显示捕获的异常(newSingleThreadScheduledExecutor)

时间:2013-08-08 05:45:51

标签: java exception-handling scheduledexecutorservice

用于计划执行者:

        executor = Executors.newSingleThreadScheduledExecutor();
        Runnable ppt = new Runnable() {
            public void run() {
                try {
                    processTask();
                } catch(Exception e) {
                    System.out.println(e.getMessage());
                    //need to be aware of this exception, no message is outputted
                }
            }
        };
        executor.scheduleWithFixedDelay(ppt, 0, 1000/20, TimeUnit.MILLISECONDS);

for processTask方法:

       private void processTask() {
           try {
             //task business logic
           } catch(SomeOtherException e) {
                 System.out.println(e.getMessage());
                //I want to be aware of this exception also
           }
        }

我知道任务失败是有原因的,我不希望它在那之后继续(我使用executor.shutdown()取消它)。

我只需要知道捕获异常时的错误。在上述方法中似乎没有这样做。

提前感谢您的回复。

2 个答案:

答案 0 :(得分:0)

您正在将try catch块放入进程任务中,这就是为什么该方法中的任何问题都将解决的原因,如果您调用shutdown,则控件将不会返回上述方法。

          Runnable ppt = new Runnable() {
                public void run() {
                    try {
                    processTask();
                    } catch(Exception e) {
                        System.out.println(e.getMessage());

                    }
                }
            };
         executor.scheduleWithFixedDelay(ppt, 0, 1000/20, TimeUnit.MILLISECONDS);

在此示例中,您将获得'/ by zero exception',然后调度程序将关闭。

       private static void processTask() {
           try {
             //task business logic
               int x=2/0;
           } catch(Exception e) {
                 System.out.println(e.getMessage());
                //I want to be aware of this exception also
                  executor.shutdown();
           }
        }

答案 1 :(得分:0)

尝试使用e.printStackTrace()getMessage()是由Throwable class等每个异常类继承的ArithmeticException(所有Java异常的超类)的方法。 getMessage()方法仅打印由对象e打印的输出的消息部分(如果有任何消息可用)。 printStackTrace()方法打印完整堆栈跟踪以及发生异常的行号,并显示错误消息 - 请参阅:http://way2java.com/exceptions/getmessage-printstacktrace/#sthash.QMvLohu3.dpuf

由Kostja here

回答
  

消息和堆栈跟踪是两个截然不同的部分   信息。虽然stackstrace是必需的,但消息不是。   大多数例外都会传递信息,这是最好的做法,但是   有些人只是没有,而且没有什么可以解决的。

有关详情,您可以在此处link-1link-2查看类似的问题。