伙计们,我需要一些帮助,我在下面的代码片段中收到此错误。 这是堆栈跟踪。我有一种感觉,有人说我不会付出太多努力。它确定我同意,给我一个建议,我应该做些什么,生病了,只是因为我有点卡住而没有前进所以想到在这里发帖。
我认为我遇到了问题,因为当使用要写入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 :(得分:4)
您对s
中s.getBytes
的引用可能为空。这意味着要执行的是
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()?
答案 1 :(得分:2)
显然data[i-2][j]
为空。你没有把它设置在任何地方,所以它是空的。
答案 2 :(得分:1)
data[i-2][j]
看起来像null
。它应该是非null
吗?检查您如何初始化它,因为,目前,您只是声明data[][]
是String[2000][5]
数组,您没有初始化其内容。所以它充满了空白。
答案 3 :(得分:1)
你在什么时候初始化data [] []数组?
String data[][] = new String [2000][5];
分配空间,但似乎你从未在数组中放入任何字符串。
另外我觉得我应该指出string.getBytes()不是字符编码安全的。您应该始终指定字符编码,例如UTF-8或UTF-16。请记住,字符串中的字符不等于字节; getBytes()转换数据。
答案 4 :(得分: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(...);
}
}
答案 5 :(得分:0)
嘿流浪者,你已经将你的数组数组声明为
String data[][] = new String [2000][5];
您正在访问该位置[2000]。在上面的数组中,您的索引应始终小于2000。