Java - 方法调用上的空指针异常

时间:2016-12-20 03:44:18

标签: java android

我正在使用LibGDX为Android构建游戏。 我在这个类中得到一个空指针异常,但我不知道为什么(检查注释)。

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();
        }
    }
}

这里可能会发生什么?必须在任何方法之前调用此函数的构造函数,这样可以保证纹理总是正确加载吗?那么为什么我会得到空指针异常?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

在循环中,每次迭代都会创建一个新数组,这意味着当循环结束时,您将拥有一个刚刚初始化的最后一个元素的新数组。 将数组的创建移出循环。