2012-05-05 50 views
37

Khi tôi chạy chương trình Java của tôi, nó mang lại cho tôi một lỗi trên dòng nàyCách giải quyết lỗi java.lang.NullPointerException?

compiler.getTask(null, null, new DiagnosticCollector<JavaFileObject>(), null, null, compilationUnits);

Lỗi Tôi nhận được là:

Exception in thread "main" java.lang.NullPointerException 
    at AnotherClassLoader.loadClass(test.java:58) 
    at test.main(test.java:30) 
    at Main.main(Main.java:68) 

bạn có thể vui lòng cho tôi biết làm thế nào tôi có thể giải quyết lỗi này ?

+0

Vui lòng bao gồm [SSCCE] (http://www.sscce.org) nếu bạn muốn được trợ giúp. Chúng tôi không thể làm gì nhiều nếu không có SSCCE. Cảm ơn. Oh, và xem xét việc thay đổi tiêu đề của câu hỏi của bạn để một cái gì đó một chút mô tả xin vui lòng. – kentcdodds

+0

Stacktrace cung cấp cho bạn dòng chính xác nơi 'NullPointerException'occurs. Bạn chỉ cần hiểu lý do tại sao bạn có và sửa chữa nó ... –

+4

Nó được giải quyết bằng cách ** xác định vấn đề ** và sau đó ** sửa chữa vấn đề đã xác định **. NPEs [nên] chỉ xảy ra trong trường hợp: 'someNullExpression.someMember'. Nghĩa là, giá trị 'null' phải là biểu thức * target * của một thành viên/phương thức cho ngoại lệ này để tự nhiên xảy ra. Trong ví dụ được đăng, chỉ có * một * biểu thức có thể đáp ứng yêu cầu này. (Gợi ý: biến 'trình biên dịch' đánh giá là gì?) –

Trả lời

6

Lỗi này xảy ra khi bạn cố gắng tham chiếu đến một cá thể đối tượng rỗng. Tôi không thể cho bạn biết nguyên nhân gây ra lỗi này bằng thông tin đã cho của bạn, nhưng bạn có thể gỡ lỗi dễ dàng trong IDE của bạn. Tôi khuyên bạn nên sử dụng xử lý ngoại lệ để tránh hành vi của chương trình không mong muốn.

74

Một NullPointerException có nghĩa là một trong các biến bạn đang vượt qua là null, nhưng mã cố gắng sử dụng nó như nó không phải là.

Ví dụ, Nếu tôi làm điều này:

Integer myInteger = null; 
int n = myInteger.intValue(); 

Mã cố gắng để lấy intValue của myInteger, nhưng vì nó là null, nó không có một: một con trỏ ngoại lệ vô xảy ra.

Điều này có nghĩa là phương thức getTask của bạn đang mong đợi một thứ không phải là rỗng, nhưng bạn đang chuyển một giá trị rỗng. Tìm ra những gì getTask cần và vượt qua những gì nó muốn!

1

Chỉ cần chụp trong bóng tối (vì bạn không chia sẻ mã khởi tạo compiler với chúng tôi): cách bạn truy xuất compiler gây ra sự cố. Cho JRE của bạn vào bên trong JDK như không giống như jdk, jre không cung cấp bất kỳ công cụ nào do đó, kết quả là NPE.

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