2011-05-05 12 views
6

Tengo un comando que crea un archivo en el disco. Como la carpeta en la que se debe crear el archivo es dinámica, tengo un catch (FileNotFoundException e). En el mismo bloque de prueba, ya tengo un bloque catch (Exception e). Por alguna razón, cuando ejecuto mi código y la carpeta aún no existe, se usa el bloque catch (Exception e), no FileNotFoundException.JAVA + try catch (FileNotFoundException e) entra en catch (Exception e)?

El depurador está claro, aunque (al menos para mí), mostrando una FileNotFoundException: java.io.FileNotFoundException: c: \ MyData \ 2F8890C2-13B9-4D65-987D-5F447FF0DDA7 \ filename.png (El sistema no puede encontrar el ruta especificada)

¿Alguna idea de por qué no entra en el bloque FileNotFoundException? Gracias;

CÓDIGO:

import java.io.FileNotFoundException; 

try{ 
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
    Rectangle screenRectangle = new Rectangle(screenSize); 
    Robot robot = new Robot(); 
    BufferedImage image = robot.createScreenCapture(screenRectangle); 
    ImageIO.write(image, "png", new File(fileName)); 
} 
catch (FileNotFoundException e){ 
    // do stuff here.. 
    return false; 
} 
catch(Exception e){ 
    // do stuff here.. 
    return = false; 
} 
+3

Sería útil si publica el fragmento de código real con el que está teniendo el problema. También asegúrese de que la excepción FileNotFoundException que está importando sea la misma que se está lanzando. Ocasionalmente, su IDE puede importar el paquete incorrecto si hay otra biblioteca en su ruta de clase que también tiene una excepción FileNotFoundException. No es probable, pero es importante descartarlo primero. – Jberg

+0

por favor, publique el código y la stacktrace también. – Bhushan

+0

Eso debería funcionar. Haz lo que @normalocity sugirió para confirmar el nombre de la clase de excepción. Me aventuraría a adivinar que podría ser una IOException general. – JustinKSU

Respuesta

4

También es posible que la cuestión específica que está teniendo no es un FileNotFoundException. Al usar la "Excepción" en un bloque de catch (que es la clase padre de todas las Excepciones) esto es efectivamente un "catch all", ya que se ejecutará si hay una `Exception o cualquiera de sus subclases lanzadas.

Prueba el siguiente cambio:

... 

catch (Exception e) { 
    System.out.println(e.getClass()); 
} 
... 

Esto le dirá la clase específica de la excepción de ser capturado por este bloque. Apuesto a que encontrará que la excepción es en realidad una instancia de una subclase (como IOException, por ejemplo).

0

Su problema es que FileNotFoundException se arroja a algún lugar en el fondo de la biblioteca java y no se propaga para que no pueda atraparlo. El verdadero culpable aquí es una NullPointerException originario de la llamada

ImageIO.write(image, "png", new File(fileName)); 

. Este se encuentra con su bloque catch (Exception e).
Si agrega un bloque catch (NullPointerException e) antes de su captura de Excepción general, lo verá entrar allí.