2012-05-05 586 views
37

當我運行我的Java程序,它給了我一個錯誤,在這條線如何解決java.lang.NullPointerException錯誤?

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

錯誤,我得到的是:

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) 

你能告訴我怎樣才能解決這個錯誤?

+0

如果您需要任何幫助,請附上[SSCCE](http://www.sscce.org)。沒有SSCCE,我們做不了什麼。謝謝。哦,並考慮將你的問題的標題改爲更具描述性的內容。 – kentcdodds

+0

stacktrace爲您提供'NullPointerException''發生的確切行。你只需要明白你爲什麼得到它並修復它... –

+4

它是通過**識別問題**然後**解決已識別問題**來解決的。 NPE [只能]發生在:'someNullExpression.someMember'的情況下。也就是說,'null'值必須是成員/方法的* target *表達式,以便自然發生該異常。在發佈的例子中,只有* 1 *表達式可以滿足這個要求。 (提示:編譯器變量的計算結果是什麼?) – 2012-05-05 18:09:24

回答

6

當您嘗試引用空對象實例時發生此錯誤。我不能告訴你由於給定的信息導致這個錯誤的原因,但是你可以在IDE中輕鬆地調試它。 我強烈建議您使用異常處理來避免意外的程序行爲。

74

NullPointerException意味着您傳遞的變量之一爲null,但代碼嘗試使用它,就像它不是。

例如,如果我這樣做:

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

代碼試圖搶myInteger的的intValue,但因爲它是空,它沒有一個:一個空指針異常情況發生。

這意味着你的getTask方法期望的東西不是null,而是傳遞null。弄清楚getTask需要什麼並傳遞它想要的東西!

1

只是在黑暗中拍攝(因爲您沒有與我們分享compiler初始化代碼):您檢索compiler的方式會導致此問題。將JRE指向JDK內部,與jdk不同,因此jre不提供任何工具,因此結果爲NPE