【问题标题】:Weird bug in Java try-catch-finallyJava try-catch-finally 中的奇怪错误
【发布时间】:2011-09-24 21:56:39
【问题描述】:

我正在使用 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

附:方法的返回类型是void

这怎么可能?即使connection.connect() 有问题,它也会出现在catch 块中。 困惑

【问题讨论】:

  • 尝试捕捉Throwable,并观察stacktrace,也许conection.connect() 抛出了一个错误(它也扩展了Throwable)。
  • 也许你有一个java.lang.Error
  • 为什么不附加一个调试器,看看会发生什么?我的猜测是你缺少一个类/库,所以connection.connect() 导致ClassNotFoundError。这不会被捕获为异常,但它会带您进入finally 子句。
  • 正确。但是 jvm 仍然会告诉一些有关 ClassNotFoundError 的信息,并且由于本地没有丢失 lib,所以我无法检测到该错误。

标签: java try-catch program-flow jodconverter


【解决方案1】:

可能引发了错误。这仍然会导致 try 块未完成,catch Exception 块被忽略并调用 finally 块。

【讨论】:

    【解决方案2】:

    尝试捕捉Throwable,并观察堆栈跟踪,也许conection.connect() 抛出了Error(或其他也扩展了Throwable 的自定义类)。

    【讨论】:

      【解决方案3】:

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

      如果是这样,这将解释您报告的输出。

      【讨论】:

        【解决方案4】:

        根据OpenOfficeConnection 接口的实现,可以预期各种类型的 throwable。有可能其中一个 throwable 没有扩展 java.lang.Exception。试着抓住java.lang.Throwable

        【讨论】:

          猜你喜欢
          • 2017-03-27
          • 2011-10-31
          • 2015-09-05
          • 2011-11-17
          • 2011-06-01
          • 2013-05-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多