2012-04-20 3 views
0

죄송합니다. 좋은 설명이 아니라면 12:34 am이고 늦은 밤 프로그래밍을하고 있지만 도움이 필요합니다. Btw 이것은 LWJGL에 있습니다. 내 코드는 다음과 같습니다.자바 다차원 배열. Null Pointer

addAt() 및 draw()에 대해 널 포인터 오류가 계속 발생합니다. 기본적으로 클릭 할 때 addAt (mousex, mousey)를 실행하는 몇 가지 클래스가 있습니다. 렌더 루프에서는 그리기를 계속합니다. 새로운 Block (x, y) 클래스는 QUAD를 그리는 클래스입니다.

//beggining 
public class Grid { 

    Block[][] blocks = new Block[25][25]; 
    public Grid(){ 
     for (int x = 0; x < 25 - 1; x++) { 
      for (int y = 0; y < 16 - 1; y++) { 
       blocks[x][y] = new Block(x,y); 
      } 
     } 
    } 
    public void draw(){ 

     for (int x = 0; x < 25;x++){ 
      for (int y = 0; y < 25;y++){ 
       blocks[x][y].draw(); 
      } 
     } 

    } 
    public void addAt(int x,int y){ 

     blocks[x][y] = new Block(x,y); 

    } 
} 
//end 

기본적으로 Main은 표시 루프를 만들고 입력 수신기를 실행하고 있습니다.

그러면 Block 클래스는 정의 된 x 및 y에서 쿼드를 만들고 있습니다.

죄송 합니다만 스택 오버플로 규칙에 위배됩니다. 이것은 나의 첫 번째 게시물이며 늦은 시간입니다. :) 미리 감사드립니다!

+0

당신이 addAt() 호출에 전달 된 매개 변수를 인쇄 할 수 심야 프로그램 ;-) 것 같다. 디버깅에 도움이 될 것입니다. –

+0

'addAt' 호출에 예외가 발생 했습니까? 'blocks'이 null이 아닌 이상 문제가되어서는 안됩니다. 이 문제는 아마도'draw'에서 발생할 것입니다. – bdares

답변

3

블록 배열에 추가하는 동안 루핑은 0에서 (25-1)과 (16-1) 사이입니다. 블록을 처리하는 동안 루핑은 0에서 25까지입니다. 아마도 NPE로 이어질 것입니다. 블록을 0에서 25로 초기화하십시오 (x와 y 값 모두에 대해).

+0

더 구체적으로, 두 루프는'for (int x = 0; x <25; x ++)'와 같이 읽어야합니다. – bdares

+0

실제로는별로 감사하지 않았지만 어쨌든 덕분에 – JavaMan111

0

나는 당신의 코드를 시험해 보았다. 나는 아무런 예외도 없다. 여기 내 코드는 다음과 같습니다

public class Test { 

    private class Block { 
     int x, y; 

     private Block(int x, int y) { 
      this.x = x; 
      this.y = y; 
     } 


     void draw() { 

     } 
    } 


    Block[][] blocks = new Block[25][25]; 

    public Test(){ 
     for (int x = 0; x < 25 - 1; x++) { 
      for (int y = 0; y < 16 - 1; y++) { 
       blocks[x][y] = new Block(x,y); 
      } 
     } 
    } 
    public void draw(){ 

     for (int x = 0; x < 25;x++){ 
      for (int y = 0; y < 25;y++){ 
       blocks[x][y].draw(); 
      } 
     } 

    } 
    public void addAt(int x,int y){ 
     blocks[x][y] = new Block(x,y); 
    } 



    public static void main(String[] args) { 
     Test t = new Test(); 
     t.addAt(4,5); 
    } 
} 

=> 문제는

+0

문제는 게임 루프에 있습니다. 그리면 제대로 업데이트됩니다. 그게 null 포인터의 원인이고 그 문제를 해결할 방법이 없습니다. – JavaMan111