0

对于计划执行者:

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

对于 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() 来取消它)。

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

提前感谢您的任何回复。

4

2 回答 2

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();
           }
        }
于 2013-08-08T06:18:42.430 回答
0

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

正如 Kostja在这里回答的那样

消息和堆栈跟踪是两条不同的信息。虽然 stackstrace 是强制性的,但消息不是。大多数异常都会传递消息,这是最佳实践,但有些异常不会传递消息,因此无需采取任何措施来修复它。

有关更多信息,您可以在此处查看类似查询link-1link-2

于 2013-08-08T06:21:04.900 回答