用于计划执行者:
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()取消它)。
我只需要知道捕获异常时的错误。在上述方法中似乎没有这样做。
提前感谢您的回复。
答案 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是必需的,但消息不是。 大多数例外都会传递信息,这是最好的做法,但是 有些人只是没有,而且没有什么可以解决的。