Java程序通过几行代码传递到最后

时间:2015-09-29 09:33:33

标签: java exception-handling

我希望我能找到更好的标题......无论如何,我得到了这个非常奇怪的行为,程序基本上就是这样做的(没有不必要的细节):

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

报告构造函数也有非法的异常:

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

怎么可能呢?我错过了什么吗?

  • 如果没有例外,为什么“INSIDER”或“MESSAGE 3”不是 印?
  • 如果 行中出现异常“报告rpt =新...” 为什么它从未被捕获块捕获?

编辑:日志中没有错误,这些行之间没有任何错误

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

2 个答案:

答案 0 :(得分:3)

如果你得到一个错误(或Throwable,它是异常和错误的超类),那么catch异常将无法捕获它。

容器服务器日志通常会记录未捕获的Throwable。

答案 1 :(得分:0)

我认为您的代码抛出任何错误,将catch块与Error e放在一起并打印错误消息以查看详细信息。