2011-05-05 8 views
6

Mam pewne polecenie, które tworzy plik na dysku. Ponieważ folder, w którym plik ma zostać utworzony, jest dynamiczny, mam funkcję catch (FileNotFoundException e). W tym samym bloku try mam już blok catch (Exception e). Z jakiegoś powodu, po uruchomieniu mój kod i folder nie istnieje jeszcze, blok catch (wyjątek e) jest używany, a nie FileNotFoundException jeden.JAVA + spróbuj złapać (FileNotFoundException e) w catch (wyjątek e)?

Debuger jest jasne, choć (przynajmniej dla mnie), pokazując FileNotFoundException: java.io.FileNotFoundException: C: \ mydata \ 2F8890C2-13B9-4D65-987D-5F447FF0DDA7 \ filename.png (System nie może odnaleźć ścieżka podana)

Każdy pomysł, dlaczego nie wchodzi w blok FileNotFoundException? Dzięki;

KOD:

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

Przydałoby się opublikować rzeczywisty fragment kodu, w którym występuje problem. Upewnij się także, że importowany plik FileNotFoundException jest tym samym, który jest zgłaszany. Czasami Twój IDE może zaimportować niewłaściwy pakiet, jeśli istnieje inna biblioteka na ścieżce klasy, która ma również wyjątek FileNotFoundException. To mało prawdopodobne, ale ważne jest, aby najpierw to wykluczyć. – Jberg

+0

proszę również zaksięgować kod i stos stacktrace. – Bhushan

+0

To powinno zadziałać. Wykonaj polecenie @normalocity, aby potwierdzić nazwę klasy wyjątku. Zaryzykowałbym przypuszczenie, że to może być ogólny wyjątek IOException. – JustinKSU

Odpowiedz

4

Możliwe jest również, że specyficzny problem masz nie jest FileNotFoundException. Używając "wyjątku" w bloku catch (który jest klasą nadrzędną dla wszystkich wyjątków), jest to faktycznie "catch all", ponieważ będzie działał, jeśli wystąpi `wyjątek lub jakakolwiek z jego podklas.

Spróbuj następującą zmianę:

... 

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

to powie specyficzną klasę wyjątku przyłapania przez tego bloku. Założę się, że Wyjątek jest w rzeczywistości instancją podklasy (na przykład wyjątek IOException).

0

Twój problem polega na tym, że wyjątek FileNotFoundException jest umieszczany gdzieś głęboko w bibliotece Java i nie jest propagowany, więc nie możesz go złapać. Prawdziwym winowajcą jest tu NullPointerException pochodzące z połączenia

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

. Ten wchodzi do twojego bloku catch (Exception e).
Jeśli dodasz blok catch (NullPointerException e) przed ogólnym wychwyceniem wyjątku, zobaczysz, że się tam znajduje.

Powiązane problemy