2012-08-30 237 views
-1

我有以下異常:Java的異常處理NullPointerException異常

Exception in thread "main" java.lang.NullPointerException 
    at Studentlist.Studentlist(Studentlist.java:79) 
    at Studentlist.main(Studentlist.java:38) 

在線38: 我傳遞輸入到getstudentsprofile。

上line79: 我做:

int z= array1.length; 

如何調試這個問題。 我正在閱讀大量的記錄和它在一個地方崩潰的一切,這個例外。 如何調試?我怎樣才能看到異常發生時的值是什麼?

逸岸,我有:

catch (IOException ee) 
     { 
      ee.printStackTrace(); 
     }  

,但沒有運氣。

+1

我認爲你的array1爲空。 –

回答

4

好像array1nullNullPointerException不是IOException所以你需要趕上

catch (NullPointerException npe) { 
      npe.printStackTrace(); 
} 

,甚至最好不要讓你的代碼,以提高這種情況的發言,檢查空

int z = SOME_DEFAULT_VALUE; 
if(arr!=null){ 
z = arr.length; 
} 
+3

他不應該抓住這個例外。他應該修復它 – Robin

+0

不應該捕捉運行時異常。你最終用你的代碼掩蓋了這個問題。 –

2

檢查是否數組1爲空

if(array1 ! = null) { // you should always avoid NPEs 

    int z= array1.length; 
} 

或者

catch (IOException | NullPointerException e) // you can multi-catch exceptions, java7 new feature 
    e.printStackTrace(); 
}  

NullPointerException異常和IOException異常是不同的。按照教程Exceptions

1

array1未初始化,這就是爲什麼你會得到NullPointerException。

顯然,一個IOException不是 a NullPointerException這就是爲什麼它不進入catch塊。

要調試Java程序,請使用內置調試功能的IDE。你會發現非常容易使用Netbeans。其他像Eclipse和JDeveloper也有不錯的功能。

2

陣列1在行79爲空,但你不應該趕上NullPointerException,因爲它最有可能標誌着在你的程序中的錯誤。相反,您應該檢查參考是否爲!= null(如果null是您程序中的有效值),或者如果不是,則通過例如拋出InvalidArgumentException來通知主叫方代碼它提供了無效值。

if(array1 ! = null) { //if array1 being null is a valid value in a program 
    int z= array1.length; 
} 
//continue with your processing 

if(array1 ! = null) { //if array1 being null is not a valid value in a program 
    throw new IllegalArgumentException("You should pass a not null array for processing"); 
} 
1

NullPointerException發生是因爲你沒有初始化array1這意味着array1不指向任何內存location.You必須初始化數組1像 int[] arrray1 = new int[size];

2

只是處理它與try/catch .... 需要使用if條件...

try{ 

    int z= array1.length; 

}catch(final IOException|NullPointerException ex){  

      // This Nested catch works with Java 7 and above 

} 
1

嘿,不要捕捉NullPointerException,這不是一個好的做法。相反,試着解決這個問題。給出運行時異常以修復編程錯誤。在你的情況下,array1是NULL,因爲它沒有被初始化。這樣做,它應該工作。