2011-06-29 2 views
3

J'utilise JODConverter pour convertir .xls et .ppt en format .pdf. Pour cela, j'ai le code quelque chose commeBug bizarre en Java try-catch-finally

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 
} 

Ma sortie:

connecting to open office 
connection object created 
coming in finally 

post-scriptum le type de retour de la méthode est void

Comment est-ce possible? Même s'il y a un problème dans connection.connect(), il s'installe en catch block. confus

+4

essayer d'attraper 'Throwable', et regarder stacktrace, peut-être conection.connect() a lancé une erreur (qui s'étend également Throwable). – amit

+0

Peut-être que vous avez un 'java.lang.Error'? – wjans

+1

Pourquoi ne pas attacher un débogueur et voir ce qui se passe? Je suppose qu'il vous manque une classe/bibliothèque, donc 'connection.connect()' donne un 'ClassNotFoundError'. Cela ne serait pas considéré comme une exception, mais cela vous mènerait à la clause 'finally'. –

Répondre

5

Une erreur a peut-être été renvoyée. Cela entraînerait quand même que le bloc try ne soit pas terminé, que le bloc Exception catch soit ignoré et que le bloc finally soit appelé.

1

Si une erreur de type Erreur s'est produite, ou pire, de type Throwable, alors votre gestionnaire de catch pour Exception ne se déclencherait pas. Est-il possible que vous receviez une sorte d'erreur de VM, ou OOM, ou un débordement de pile?

Si tel est le cas, cela prend en compte la sortie que vous avez indiquée.

2

essayer d'attraper Throwable, et regarder stacktrace, peut-être un conection.connect() jeté Error (ou une autre classe personnalisée qui étend également Throwable).

0

En fonction de la mise en œuvre de OpenOfficeConnection Interface différents types de throwables peuvent être attendus. Il est possible que l'un de ces jetables ne s'étende pas java.lang.Exception. Essayez d'attraper java.lang.Throwable au lieu