Странная ошибка в Java try-catch-finally - PullRequest
3 голосов
/ 29 июня 2011

Я использую 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

PS тип возврата метода void

Как это возможно?Даже если есть какая-то проблема в connection.connect (), она появится в блоке catch. растерян

Ответы [ 4 ]

5 голосов
/ 29 июня 2011

Возможно, была выдана ошибка.Это все равно приведет к тому, что блок try не будет завершен, блок catch Exception будет проигнорирован и будет вызван блок finally.

2 голосов
/ 29 июня 2011

попытаться поймать Throwable и посмотреть трассировку стека, возможно conection.connect() бросил Error (или другой пользовательский класс, который также расширяет Throwable).

1 голос
/ 29 июня 2011

Если произошла ошибка типа Error или, что еще хуже, типа Throwable, ваш обработчик перехвата Exception не сработает.Возможно ли, что вы получаете какую-то ошибку VM, или OOM, или переполнение стека?

Если это так, это будет учитывать вывод, о котором вы сообщили.

0 голосов
/ 29 июня 2011

В зависимости от реализации интерфейса OpenOfficeConnection можно ожидать различные типы метаний.Возможно, что одна из этих метаний не будет расширяться java.lang.Exception.Попробуйте поймать java.lang.Throwable вместо

...