Java 再次出现空指针异常
不久前我问了同样的问题,有人告诉我初始化我的squareChecker变量,我就这样做了。由于某种原因,我仍然会得到相同的错误,而我并不知道。我花了整整一天的时间试图自己解决这个问题,但没有结果。有人知道我的问题是什么吗 我的普通模式类(其中我从square类调用方法并呈现内容): 这是我得到的错误:Java 再次出现空指针异常,java,object,reference,nullpointerexception,initialization,Java,Object,Reference,Nullpointerexception,Initialization,不久前我问了同样的问题,有人告诉我初始化我的squareChecker变量,我就这样做了。由于某种原因,我仍然会得到相同的错误,而我并不知道。我花了整整一天的时间试图自己解决这个问题,但没有结果。有人知道我的问题是什么吗 我的普通模式类(其中我从square类调用方法并呈现内容): 这是我得到的错误: Exception in thread "main" java.lang.NullPointerException at data.src.Square.startGame(Square.
Exception in thread "main" java.lang.NullPointerException
at data.src.Square.startGame(Square.java:112)
at data.src.NormalMode.init(NormalMode.java:23)
at org.newdawn.slick.state.StateBasedGame.init(StateBasedGame.java:171)
at org.newdawn.slick.ScalableGame.init(ScalableGame.java:69)
at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
at data.src.Core.main(Core.java:30)
在NormalMode.Init()代码>
g
定义为图形g代码>
startGame()
调用g.drawString()
这使我得出结论,在将g
传递给startGame()
方法之前,您没有实例化它。在startGame
方法中只有一件事可以null
。你为什么认为g(图形)会有一个值呢?不,(我可以看到)你在哪里得到一个图形参考@TMcKeown我不知道我在做什么。我仍然是一个新手,请原谅我犯了这些编程错误。好吧,我在square类中初始化了图形,但它仍然不起作用。我甚至将squareChecker更改为normalmode的update()方法,以查看它是否有效,它确实有效。问题是,即使游戏现在开始,这个方法也不会调用或不起作用,因为屏幕上没有出现字符串。这是一个完全不同的问题。我建议您使用调试器运行代码,看看您的代码是否符合预期的所有方法。
public class Square {
private StateBasedGame game;
boolean correct;
boolean clickable;
boolean clicked;
boolean started;
int squares;
int squareX;
int squareY;
public Image squareIncorrect;
public Image squareCorrect;
//For drawing these images from other classes
{
try {
squareIncorrect = new Image("res/squareIncorrect.png");
} catch (SlickException e1) {
e1.printStackTrace();
}
try {
squareCorrect = new Image("res/squareCorrect.png");
} catch (SlickException e) {
e.printStackTrace();
}
}
public Square(GameContainer container) { }
public boolean checkCorrect(){
return correct;
}
public boolean checkClickable(){
return clickable;
}
public boolean checkClicked(){
return clicked;
}
public int returnNumberOfSquares(){
return squares;
}
//Draw appropriate square on screen depending on the creatRandom. CREATE THE RANDOM FIRST!
public void squareDraw(int x ,int y, Graphics g)throws SlickException{
if(correct == true){
g.drawImage(squareCorrect, x, y);
started = true;
}
else if(correct == false){
g.drawImage(squareIncorrect, x, y);
started = true;
}
}
public void createRandom(){
Random rand = new Random();
int sRand = rand.nextInt(2);
if(sRand == 0){
correct = false;
clickable = true;
clicked = false;
System.out.println("This square is a phony!");
}
else if(sRand == 1){
correct = true;
clickable = true;
clicked = false;
System.out.println("This is a true Square!");
squares = squares+1;
}
}
public void youWin(int x, int y, Graphics g){
if(squares == 0){
g.drawString("You win!", x, y);
try {
wait(4000);
game.enterState(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void startGame(Graphics g){
g.drawString("Remember the blue squares! The game will start in 5 seconds!", 200, 300);
}
}
Exception in thread "main" java.lang.NullPointerException
at data.src.Square.startGame(Square.java:112)
at data.src.NormalMode.init(NormalMode.java:23)
at org.newdawn.slick.state.StateBasedGame.init(StateBasedGame.java:171)
at org.newdawn.slick.ScalableGame.init(ScalableGame.java:69)
at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
at data.src.Core.main(Core.java:30)