2008-10-31 36 views
15

Làm cách nào để bạn gỡ lỗi getResource các phương thức kiểu không thành công, trả lại giá trị rỗng?Gỡ lỗi getResource *

Tôi chắc chắn tệp đang tìm kiếm ở đó, nhưng nó trả về NULL. Làm thế nào để tôi biết những gì nó đang tìm kiếm để cố gắng phát hiện bất kỳ sự không phù hợp nào?

Trả lời

4

Bạn có thể sử dụng chế độ gỡ lỗi Eclipse và đặt điểm ngắt trên phương thức không thành công. Từ đó bạn có thể đi từng bước xuống trong cây cuộc gọi cho đến khi bạn thấy những gì không thành công.

Phổ biến nhất là các tập tin là không có bởi vì nó đã không được sao chép có hoặc không có trong classpath vv ...

+0

ACK, đó là những gì tôi cũng đã tham gia. – dhiller

+0

có đó là phổ biến nhất, nó đã xảy ra nhiều lần trong khi đi từ IDE đến một kịch bản kiến ​​để biên dịch ... – Vinze

3

gọi Các getResource đang tìm kiếm một tập tin liên quan đến các tập tin lớp.

Dự đoán đầu tiên của tôi là khi bạn đã biên dịch, bạn đã quên đặt các tệp tài nguyên vào thư mục biên dịch. Đó là những gì tôi đã chạy thường xuyên.

0

Tôi thường trải nghiệm điều này bất cứ khi nào ClassLoader thay đổi.

Tùy thuộc vào ngữ cảnh chính xác mà ứng dụng đang chạy Lớp tải có các quy tắc khác nhau về thời điểm tệp tài nguyên tồn tại. Ví dụ trong netReans getResource là trường hợp không nhạy cảm, nhưng trong JRE của Sun nó là.

Mặc dù không trả lời trực tiếp câu hỏi của bạn, tôi nghĩ bạn nên biết điều này (nếu bạn chưa biết).

12

Kể từ getResource() tìm kiếm classpath (như những người khác đã đề cập), nó có thể hữu ích để đổ classpath thực tế đang được tìm kiếm trước khi bạn problemsome getResource() gọi:

log.debug("classpath is: " + System.getProperty("java.class.path")); 

//the line that is returning null 
... = Thread.currentThread().getContextClassLoader().getResource("foobar"); 

gì có lẽ xảy ra là các tập tin/thư mục bạn nghĩ là trên classpath thực sự là không (có lẽ một con đường không hợp lệ đang được đặt ở đâu đó trên đường đi).

0

Tôi nghĩ bạn nên nói với Eclipse hoặc IDE yêu thích của bạn nơi có thể tìm thấy tệp nguồn JDK (JRE). Sau đó, bạn cũng có thể bước vào các phương thức của các lớp Java Runtime.