2011-05-05 42 views
6

Tôi có một số lệnh tạo tệp trên đĩa. Vì thư mục trong đó tệp phải được tạo là động, tôi có một nắm bắt (FileNotFoundException e). Trong cùng một khối try, tôi đã có một khối catch (Exception e). Vì một số lý do, khi tôi chạy mã của mình và thư mục chưa tồn tại, khối catch (Ngoại lệ e) được sử dụng, không phải là tệp FileNotFoundException.JAVA + thử bắt (FileNotFoundException e) sẽ bắt (Ngoại lệ e)?

Trình gỡ lỗi là rõ ràng mặc dù (với tôi ít nhất), hiển thị một FileNotFoundException: java.io.FileNotFoundException: c: \ mydata \ 2F8890C2-13B9-4D65-987D-5F447FF0DDA7 \ filename.png (Hệ thống không thể tìm thấy đường dẫn được chỉ định)

Bất kỳ ý tưởng nào tại sao nó không đi vào khối FileNotFoundException? Cảm ơn;

Mã sản phẩm:

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

Sẽ hữu ích nếu bạn đăng đoạn mã thực tế mà bạn gặp sự cố. Ngoài ra, hãy đảm bảo rằng FileNotFoundException bạn đang nhập cũng giống như tệp đang được ném. Thỉnh thoảng IDE của bạn có thể nhập sai gói nếu có một thư viện khác trên đường dẫn lớp của bạn cũng có một FileNotFoundException. Không có khả năng, nhưng điều quan trọng là phải loại trừ điều đó trước tiên. – Jberg

+0

vui lòng đăng mã và chồng lên nhau. – Bhushan

+0

Điều đó sẽ hoạt động. Làm những gì @normalocity đề xuất để xác nhận tên lớp ngoại lệ. Tôi sẽ mạo hiểm để đoán nó có thể là một IOException chung. – JustinKSU

Trả lời

4

Nó cũng có thể là các vấn đề cụ thể bạn đang gặp phải không phải là một FileNotFoundException. Bằng cách sử dụng "Ngoại lệ" trong một khối catch (là lớp cha mẹ cho tất cả các ngoại lệ), đây là "bắt tất cả" một cách hiệu quả, vì nó sẽ chạy nếu có một `Ngoại lệ hoặc bất kỳ lớp con nào được ném ra.

Hãy thử thay đổi sau đây:

... 

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

này sẽ cho bạn biết lớp học cụ thể của ngoại lệ bị bắt bởi khối này. Tôi sẽ đặt cược bạn sẽ thấy rằng Exception thực sự là một thể hiện của một lớp con (ví dụ như IOException).

0

Vấn đề của bạn là FileNotFoundException được ném ở đâu đó sâu bên trong thư viện java và không được truyền lên để bạn không thể bắt được nó. Thủ phạm thực sự ở đây là NullPointerException có nguồn gốc từ số điện thoại

. Cái này chạy vào khối catch (Exception e) của bạn.
Nếu bạn thêm một khối catch (NullPointerException e) trước khi ngoại lệ chung bắt, bạn sẽ thấy nó xuất hiện ở đó.

Các vấn đề liên quan