Странный нулевой указатель - PullRequest
0 голосов
/ 06 апреля 2011

Я получаю:

Exception in thread "main" java.lang.NullPointerException
    at Display.readFile(Display.java:55)
    at Display.<init>(Display.java:36)
    at Expordium.play(Expordium.java:15)
    at Expordium.main(Expordium.java:8)

Это один класс моего кода:

import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.html.HTMLDocument.Iterator;

import java.awt.image.BufferedImage;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

public class Display extends JPanel implements Runnable{

private JFrame f = new JFrame("Expordium");
private Collection<Block> elements = new ArrayList<Block>();

private Wall wall;

private String file;
private Expordium game;
private String[][] strLevel;



public void start(Expordium g){
    strLevel = new String[30][10];
    game=g;
    f.getContentPane().add(new Display());
    f.setSize(960 , 320);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
}
Display(){
    readFile();
    for(int i=0; i<30; i++){
        for(int j=0; j<30; j++){
            if(strLevel[i][j].equals("*")){
                elements.add(wall=new Wall(i*16,j*16,true,"C:/Program Files (x86)/Software/eclipse/Programs/Expordium/Picture/Block/Grass-T.PNG"));
            }
        }
    }
}

public void run() {
    repaint();
}

public void paint(Graphics g){
    g.setColor(Color.WHITE);
    java.util.Iterator<Block> iterator = elements.iterator();
    while(iterator.hasNext())
        ((Block) iterator.next()).draw(g);

}

private void readFile() {
    int num=0;
    String loc ="C:/Program Files (x86)/Software/eclipse/Programs/Expordium/Level/Level ";
    loc.concat(game.getLevel());
    loc.concat(".txt");
    File Level = new File(loc);
    file=TextFile.getContents(Level);
    for(int i=0; i<30; i++){
        for(int j=0; j<30; j++){
            strLevel[i][j]=file.substring(num, num+1);
            num++;
        }
    }
}

}

Также я получаю его по строкам

loc.concat (".txt");

strLevel [i] [j] = file.substring (num, num + 1);

РЕДАКТИРОВАТЬ !!!!!!!Я изменил код на

    private void readFile() {
    int num=0;
    String loc ="C:/Program Files (x86)/Software/eclipse/Programs/Expordium/Level/Level 1.txt";
    File Level = new File(loc);
    file=TextFile.getContents(Level);
    for(int i=0; i<30; i++){
        for(int j=0; j<30; j++){
            System.out.println(file);
            strLevel[i][j]=file.substring(num, num+1);
            num++;
        }
    }
}

Теперь я получаю


  • *
  • *
  • *
  • *
  • *
  • *
  • * se

Исключение в теме "main" java.lang.NullPointerException в Display.readFile (Display.java:66) в Display. (Display.java:36) в Expordium.play (Expordium.java:15) в Expordium.main (Expordium.java:8)

1 Ответ

1 голос
/ 06 апреля 2011

Короткий ответ: игра пуста, когда вы пытаетесь вызвать game.getLevel ().

Более длинный ответ: в конструкторе Display первое, что вы делаете (перед тем, как что-либо сделать с игрой, которая будет иметь значение null), этовызовите readFile ().В readFile () вы вызываете game.getLevel () до установки игры равной чему-либо.Похоже, вы хотите начать устанавливать экземпляр игры, но он не вызывался до того, как пытался его использовать, так что это источник вашего NPE.

...