2009-11-24 54 views
1

夥計們,我需要一些幫助,我在下面的代碼片段中得到這個錯誤。 這裏是堆棧跟蹤。我覺得有人會說我沒有太多的努力。它是好的我同意,給我一個建議,我應該做什麼更多,生病只是因爲我有一個卡住,並沒有前進,所以想到這裏張貼它。java - nullpointer例外

我想我有一個問題,因爲我使用的是用於編寫excel文件的代碼,當寫入excel的內容的大小是預知的。當行和列的長度可能變化時,我實際需要的是某種寫入excel的方式。

Length of Array:2000 
java.lang.NullPointerException 
    at org.temp2.cod2.WriteToExcel.setExcel(WriteToExcel.java:149) >> line 149 is last line of the code snippet below i.e. byte buf[] = s.getBytes(); 

這裏的代碼片斷

String data[][] = new String [2000][5]; 

System.out.println("Length of Array:"+data.length); 

for(int j=0;j<colN.length;j++){ 
    Label myLabel1=new Label(j,1,colVal[j]); 
    wst.addCell(myLabel1); 
} 

for(int i=2;i<=data.length+1;i++){ 
    for(int j=0;j<colN.length;j++) 
    { 
      // Encrypt 
      encrypter.encrypt(new FileInputStream("C:\\Users\\abc\\Desktop\\Encrypted.txt"),new FileOutputStream("temp.txt")); 
      // Decrypt 

      ByteArrayOutputStream f = new ByteArrayOutputStream(); 
      String s = data[i-2][j]; 
      byte buf[] = s.getBytes(); 
+0

代碼看起來更好用空格而不是製表符。 – 2009-11-24 15:56:09

回答

4

您在s.getBytes中對s的引用可能爲空。所以這意味着什麼得到執行就像

byte buf[] = null.getBytes(); 

這沒有多大意義。所以你想做什麼來糾正這可能是這樣的

String s = data[i-2][j]; 
byte buf[]; 
if (s != null) 
    buf = s.getBytes(); 
else 
    buf = //What do you want the default behavior to be? maybe "".getBytes()? 
+0

不要指望s與實際的代碼不爲空。順便說一句,避免使用括號並不是一個好主意,即使是單行。 – 2009-11-24 17:09:41

1

貌似data[i-2][j]null。它應該是不是null?檢查你是如何初始化的,因爲目前,你只是聲明data[][]是一個String[2000][5]數組,你沒有初始化它的內容。所以它充滿了空值。

2

顯然data[i-2][j]爲空。你沒有設置它,所以它是空的。

1

在什麼時候你初始化data [] []數組?

String data[][] = new String [2000][5]; 

分配空間,但它似乎你永遠不會放任何字符串在數組中。

另外我覺得我應該指出,string.getBytes()不是字符編碼的安全。您應該始終指定字符編碼,例如UTF-8或UTF-16。請記住,字符串中的字符不等於字節; getBytes()轉換數據。

0

您從不初始化數組的內容。您需要循環陣列之上,並指定字符串的元素:

String[][] data = new String[2000][5]; 

for(int i = 0; i < data.length; i++) { 
    for(int j = 0; j < data[i].length; j++) { 
     data[i][j] = new String(...); 
    } 
} 
0

喂流浪者,你已經宣佈你的數組的數組作爲

String data[][] = new String [2000][5]; 

並且您正在訪問的位置[2000]。在上面的數組中,索引應該始終小於2000.