Java try-catch-finally中的奇怪错误

时间:2011-06-29 07:21:24

标签: java try-catch program-flow jodconverter

我正在使用JODConverter将.xls和.ppt转换为.pdf格式。为此,我有类似

的代码
try{
    //do something
    System.out.println("connecting to open office");
    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    System.out.println("connection object created");
    connection.connect();
    System.out.println("connection to open office successful");
    //do something
    if(!successful)
      throw new FileNotFoundException();
}catch(Exception e){
   System.out.println("hello here");
   System.out.println("Caught Exception while converting to PDF ");
   LOGGER.error("Error in converting media" + e.getMessage());
   throw new MediaConversionFailedException();
}finally{
   decode_pdf.closePdfFile();
   System.out.println("coming in finally");
  //do something here
}

我的输出:

connecting to open office
connection object created
coming in finally

P.S。返回类型的方法是void

怎么可能?即使connection.connect()中存在一些问题,它也会进入catch块。 困惑

4 个答案:

答案 0 :(得分:5)

也许抛出了错误。这仍然会导致try块未完成,忽略catch异常块并调用finally块。

答案 1 :(得分:2)

尝试捕获Throwable,并观看堆栈跟踪,可能conection.connect()投掷Error(或其他自定义类也扩展Throwable)。

答案 2 :(得分:1)

如果出现类型为Error的错误,或更糟,类型为Throwable,那么Exception的catch处理程序将不会触发。您是否可能遇到某种VM错误,OOM或堆栈溢出?

如果是这样,这将考虑您报告的输出。

答案 3 :(得分:0)

根据OpenOfficeConnection接口的实现,可以预期各种类型的throwable。其中一个throwable可能不会延伸java.lang.Exception。尝试捕捉java.lang.Throwable而不是