2009-11-24 4 views
1

얘들 아, 내가 여기에이 오류가 여기에 코드 조각 아래에 점점 도움이 필요합니다. 여기에 스택 추적이 있습니다. 누군가 내 부분에 많은 노력을 기울이지 않는다는 느낌이 든다. 그 ok 나는 동의한다, 나에게 제안을 줘야한다 내가 더 많이해야한다. 그리고 병이 나는 단지 조금 붙이게되고, 전진하지 않기 때문에 그것을 여기에서 게시하는 것을 생각했다.java - nullpointer 예외

내가 쓰기에 컨텐트의 크기가 미리 알려진 경우 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(); 

여기 코드는 data[i-2][j]null처럼

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()? 
+0

s가 실제 코드와 함께 null이 아니길 기대하지 마십시오. BTW, 대괄호 사용을 피하는 것은 실제로는 좋은 생각이 아닙니다. –

1

이 보이는 니펫을. 비 null이되어야하나요? 현재, data[][]String[2000][5] 배열로 선언 되었기 때문에 초기화하는 방법을 확인하십시오. 해당 내용을 초기화하지 않습니다. 그래서 그것은 null로 가득 차 있습니다.

2

분명히 data[i-2][j]이 null입니다. 아무 데나 설정하지 않으므로 null입니다.

1

데이터 [] [] 배열을 어느 시점에서 초기화합니까?

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보다 작아야합니다.