2009-11-24 36 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.