2011-05-05 22 views
6

Diskte bir dosya oluşturan komutum var. Dosyanın oluşturulması gereken klasör dinamik olduğundan, bir catch'um var (FileNotFoundException e). Aynı deneme bloğunda, zaten bir catch (Exception e) bloğum var. Nedense, kodumu çalıştırdığımda ve klasör henüz mevcut değilse, catch (Exception e) bloğu kullanılır, FileNotFoundException olanı değil. java.io.FileNotFoundException: C: \ mydata \ 2F8890C2-13B9-4D65-987D-5F447FF0DDA7 \ filename.png (sistem bulamazsa ayıklayıcı bir FileNotFoundException gösteren (en azından bana) da açıktırJAVA + yakalama (FileNotFoundException e) yakalanmayı yakalama (Exception e)?

yol belirtilen)

Neden FileNotFoundException bloğuna gitmiyor herhangi bir fikir? Teşekkürler;

KODU:

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

Sorun yaşadığınız asıl kod snippet'ini yayınlamanız yararlı olur. Ayrıca içe aktardığınız FileNotFoundException öğesinin, atılmakta olanla aynı olduğundan emin olun. Bazen bir FileNotFoundException olan sınıf yolunuzda başka bir kitaplık varsa IDE'niz yanlış paketi alabilir. Muhtemelen, ancak önce bunu belirlemek önemlidir. – Jberg

+0

lütfen kodu ve stacktrace'i de gönderin. – Bhushan

+0

Bu işe yaramalı. İstisna sınıfı adını doğrulamak için @normalocity'nin önerdiği şeyi yapın. Genel bir IOException olabileceğini tahmin etmeye çalışırdım. – JustinKSU

cevap

4

Size konusunda yaşadığımız sorunu FileNotFoundException olmadığını da olabilir. Bir catch bloğundaki "Exception" u (tüm istisnalar için ana sınıf olan) kullanarak, etkin bir "tümünü yakala", çünkü bir 'İstisnası ya da alt sınıflarının herhangi biri atılmışsa çalışır.

aşağıdaki değişiklik deneyin:

... 

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

Bu, bu bloğun tarafından yakalanan size İstisna belirli sınıfını söyleyecektir. Bahse girerim ki, İstisna'nın aslında bir alt sınıfın örneği (örneğin IOException gibi) olduğunu göreceksiniz.

0

Sorununuz, FileNotFoundException öğesinin java kütüphanesinin içinde bir yere fırlatıldığının ve yayılmaması için yakalanmamasıdır. Burada gerçek suçlu bir NullPointerException

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

çağrı kaynaklanan edilir. Bu, catch (Exception e) bloğunuza gider.
Genel İstisna yakalamadan önce bir catch (NullPointerException e) bloğu eklerseniz, oraya gireceğini görürsünüz.