2016-12-20 3 views
-4

저는 LibGDX를 사용하여 Android 용 게임을 제작하고 있습니다. 이 클래스에서 널 포인터 예외가 발생하지만 이유를 모르겠습니다 (설명을 확인하십시오).Java - 메서드 호출시 Null 포인터 예외가 발생했습니다.

public class ScoreFont { 
    private Texture _numbers[]; 
    private int _number; 

    public ScoreFont(){ 
     //Load font 
     for(int i = 0; i <= 9; i++){ 
      _numbers = new Texture[10]; 
      _numbers[i] = new Texture("font_"+i+".png"); 
      /*the line above works fine. if I use if(_number[i] != null) System.out.println("loaded"); it will print*/ 

     } 
     _number = 0; 
    } 

    public void setNumber(int number){ 
     _number = number; 
    } 

    public void draw(SpriteBatch sb, float x, float y, float width, float height){ 
     String numberString = Integer.toString(_number); 

     int numDigits = numberString.length(); 
     float totalWidth = width * numDigits; 

     //Draw digits 
     for(int i = 0; i < numDigits; i++){ 
      int digit = Character.getNumericValue(numberString.charAt(i)); 

      /*I get a null pointer exception when this method or the dispose() method are called. The _numbers[digit] == null, or even if I switch it for _numbers[0] it is still null. Why?*/ 
      sb.draw(_numbers[digit], x - totalWidth/2 + i*width, y - height/2, width, height); 
     } 
    } 

    public void dispose(){ 
     //I get null pointer exception 
     for(Texture texture: _numbers){ 
      texture.dispose(); 
     } 
    } 
} 

여기에 무슨 일이 일어날 수 있습니까? 이 함수의 생성자는 항상 모든 메서드보다 먼저 호출되어야하며 이는 텍스처가 항상 올바르게로드되도록 보장합니다. 그렇다면 왜 널 포인터 예외가 발생합니까?

감사합니다.

+0

@ John3136 NullPointerException이 무엇인지 압니다. 여기서 오류를 찾을 수 없습니다. 나는 정말로 당신이 행동을하기 전에 전체 질문을 읽어야한다고 생각합니다. –

+2

귀하의 생성자. 루프를 돌 때마다 새로운 텍스쳐를 만들었습니다. 루프가 종료되면'_numbers [9]'만이 null이되지 않습니다. –

+2

무엇인지 알고 있어야합니다 - 디버그, 중단 점을 설정하십시오. 값을 인쇄하십시오. * 왜 * 알아보십시오. –

답변

1
_numbers = new Texture[10]; 
_numbers[i] = new Texture("font_"+i+".png"); 

루프에서는 각 반복마다 새 배열을 만듭니다. 즉, 루프가 끝나면 마지막 요소 만 초기화 된 새로운 배열을 갖게됩니다. 어레이의 생성을 루프 밖으로 이동하십시오.

관련 문제