我希望我能找到一个更好的标题......无论如何我得到了这个非常奇怪的行为,程序基本上是这样做的(没有不必要的细节):
try {
//...does something
HashMap parameterMap = new HashMap();
//Connection setup
try{
//...does something
try {
//...does something
System.out.println("MESSAGE 1");
Report rpt = new gr.modus.ws.sepe.Report(parameterMap, connection);//Here seems to be the problem
} catch( Exception e ) {
System.out.println("MESSAGE 2");
}
System.out.println("MESSAGE 3");
//...does something
}catch(Exception ex){
System.out.println("MESSAGE 4");
}
System.out.println("MESSAGE 5");
} catch (Exception e) {
System.out.println("MESSAGE 6");
e.printStackTrace();
} finally {
try {
System.out.println("FINALLE");
//...does something
} catch (Exception e) {
e.printStackTrace();
}
}
Report 构造函数也有异常:
public Report(HashMap map, Connection con) {
System.out.println("INSIDE");
//...does something
}
在开发环境(从 Eclipse,使用 WildFly 8)中运行程序时一切正常。我得到:
MESSAGE 1
INSIDER
MESSAGE 3
MESSAGE 5
FINALLE
但是在生产环境(Weblogic 服务器)中运行时我奇怪地得到
MESSAGE 1
FINALLE
这怎么可能?我错过了什么吗?
- 如果没有异常(exception),为什么“INSIDER”或“MESSAGE 3”不是 打印?
- 如果“Report rpt = new ...”行有异常 为什么它从未被 catch block 捕获?
编辑:日志中没有错误,两行之间没有任何内容
<Sep 29, 2015 12:43:39 PM EEST> <Notice> <Stdout> <BEA-000000> <MESSAGE 1>
<Sep 29, 2015 12:43:39 PM EEST> <Notice> <Stdout> <BEA-000000> <FINALLE>
最佳答案
如果你得到一个 Error(或者是 Exception 和 Error 的父类(super class) Throwable),那么 catch Exception 将不会捕获它。
未捕获的 Throwable 通常会被容器服务器日志记录。
关于Java程序经过几行代码,最终进入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32840574/