0

nullポインターの例外を取得しているので、配列内のすべてのオブジェクトを初期化したと思いましたが、どこかで間違っているようです。

このクラスのコードは次のとおりです。配列の外部でMapBlockオブジェクトを使用する場合は正常に機能します。

実行は、updateメソッドでオブジェクトにアクセスしようとするときです。

public class Game { 
    private Scanner scan;

    // map stuff
    MapBlock[][] mapObjects;


    // List of Textures
    Texture path;
    Texture tower;
    Texture grass;

    Game(){ 
        // Textures
        path = loadTexture("path");
        tower = loadTexture("tower");
        grass = loadTexture("grass");



        mapObjects = new MapBlock[24][16];

        loadLevelFile("level1");        

    }

    public void update(){
        if(mapObjects[0][0] == null)
            System.out.println("its null!!!");
        mapObjects[0][0].update();
    }

    public void render(){
        mapObjects[0][0].render();      
    }




    private Texture loadTexture(String imageName){
        try {
            return TextureLoader.getTexture("PNG", new FileInputStream(new File("res/" + imageName + ".png")));
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException r){
            r.printStackTrace();
        }
        return null;
    }

    private void loadLevelFile(String mapName){
        try {
            scan = new Scanner(new File("res/" + mapName + ".txt"));
        } catch (FileNotFoundException e) {
            System.out.println("Could not open "+ mapName +" file!");
            e.printStackTrace();
        }

        String obj;
        int i = 0, t = 0;

        while(scan.hasNext()){
            obj = scan.next();

            if(obj == "o"){
                mapObjects[i][t] = new MapBlock("GRASS", t*32, i*32, grass);

            }else if(obj == "x"){
                mapObjects[i][t] = new MapBlock("PATH", t*32, i*32, path);

            }else if(obj == "i"){
                mapObjects[i][t] = new MapBlock("TOWER", t*32, i*32, tower);                    
            }

            if(i < 24){
                i++;
            }else{
                i = 0;
                t ++;
            }

        }
    }
}

フィードバックありがとうございます

4

1 に答える 1

4

あなたのloadLevelFile方法では:

-> if(obj == "o"){
// ...
-> }else if(obj == "x"){
// ...  
-> }else if(obj == "i"){
// ...
}

==文字列をと比較しているのと比較していないので、配列.equals()のインスタンス化が行われない可能性があります。mapObjects

次のように変更してみてください。

if(obj.equals("o")){
// ...
}else if(obj.equals("x")){
// ...  
}else if(obj.equals("i")){
// ...
}

エラーはここで発生します:

if(mapObjects[0][0] == null)
    System.out.println("its null!!!");
mapObjects[0][0].update(); <- Error happens here

メソッドがインスタンス化していないため、のオブジェクトmapObjects[0][0]はまだです。nullloadLevelFile

于 2012-12-28T19:00:00.897 に答える