Java 空指针异常错误,我们再次见面
我最终决定为我的记忆游戏制作实际的游戏部分,我再次得到了空指针异常错误。我以前在这里也问过同样的问题,所以如果这算是垃圾邮件,我很抱歉,但我根本不知道问题出在哪里 是的,我是编程新手,所以解释一下为什么要在这里插入答案将是一个很大的帮助 现在是我的方块课(这些是你必须记住的方块,以及游戏从哪里开始): 这是我的NormalMode类(在这里我从square和render调用方法):Java 空指针异常错误,我们再次见面,java,graphics,nullpointerexception,drawing,slick2d,Java,Graphics,Nullpointerexception,Drawing,Slick2d,我最终决定为我的记忆游戏制作实际的游戏部分,我再次得到了空指针异常错误。我以前在这里也问过同样的问题,所以如果这算是垃圾邮件,我很抱歉,但我根本不知道问题出在哪里 是的,我是编程新手,所以解释一下为什么要在这里插入答案将是一个很大的帮助 现在是我的方块课(这些是你必须记住的方块,以及游戏从哪里开始): 这是我的NormalMode类(在这里我从square和render调用方法): 您从未在NormalMode中初始化gameStarter,因此当您尝试调用gameStarter.startGa
您从未在
NormalMode
中初始化gameStarter
,因此当您尝试调用gameStarter.startGame(g)时
在NormalMode#init()
中,您正试图对空对象执行一个方法
实际上,您有很多地方无法初始化字段:
在类中game
(调用Square
在game.wait(5000);
Square#startGame()中)
- 类
中的NormalMode
(传递到使用它的g
)Square#startGame()
gameStarter
设置为某个值。当前,您将其保留为null。在我的记事本应用程序中,发生此异常是因为我指向一个未初始化的变量。。。所以你需要初始化gamestarter。。。希望它能起作用:)你能发一个stacktrace吗?是的,对不起,我以为我把它放进去了!我做到了这一点,但我仍然在org.newdawn.slick.state.StateBasedGame.init的data.src.Square.startGame(Square.java:115)处的data.src.NormalMode.init(NormalMode.java:23)处的org.newdawn.slick.state.StateBasedGame.init(StateBasedGame.java:171)处的线程“main”java.lang.nullpointerexception中得到了nullpointerexception错误(ScalableGame.java:69)在org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393)在org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)在data.src.Core.main(Core.java:30)上@波克先生,我已经更新了我的答案,以反映您未能初始化的另外两个位置。那么,您如何初始化图形上下文?我无法理解这一点。另外,我如何初始化gameStarter?我认为只需执行“gameStarter=new Square(arg0)”即可有什么诀窍吗?@MrPork这是你的应用程序,我不知道如何初始化你所有的自定义类。就Graphics
而言,我想你应该是从这个代码上游的某个地方继承的。我有,但它仍然给我同样的错误,我更新了普通模式类。你仍然有问题吗??
package data.src;
import java.util.Random;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.StateBasedGame;
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) {
container.getGraphics();
}
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);
}
else if(correct == false){
g.drawImage(squareIncorrect, x, y);
}
}
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();
}
}
}
//Normal mode Methods begin here. Ends at EndGame().
public void startGame(Graphics g) throws SlickException {
g.setColor(Color.red);
g.drawString("Remember the squares! The game starts in 5 seconds!", 300, 200);
clickable = false;
started = false;
try {
game.wait(5000);
started = true;
clickable = true;
returnNumberOfSquares();
squareCorrect = new Image("res/squareIncorrect");
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package data.src;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
public class NormalMode extends BasicGameState {
private Square[][] square = new Square[4][4];
private Square gameStarter;
private Graphics g;
public NormalMode() {
}
@Override
public void init(GameContainer arg0, StateBasedGame Game)throws SlickException {
gameStarter = new Square(arg0);
gameStarter.startGame(g);
for (int i = 0; i < square.length; i++){
for(int j = 0; j < square.length; j++){
square[i][j] = new Square(arg0);
square[i][j].createRandom();
}
}
}
@Override
public void render(GameContainer container, StateBasedGame game, Graphics g)
throws SlickException {
square[0][0].squareDraw(100, 300, g);
square[0][1].squareDraw(150, 300, g);
square[0][2].squareDraw(200, 300, g);
square[0][3].squareDraw(250, 300, g);
square[1][0].squareDraw(100, 400, g);
square[1][1].squareDraw(150, 400, g);
square[1][2].squareDraw(200, 400, g);
square[1][3].squareDraw(250, 400, g);
square[2][0].squareDraw(100, 500, g);
square[2][1].squareDraw(150, 500, g);
square[2][2].squareDraw(200, 500, g);
square[2][3].squareDraw(250, 500, g);
square[3][0].squareDraw(100, 600, g);
square[3][1].squareDraw(150, 600, g);
square[3][2].squareDraw(200, 600, g);
square[3][3].squareDraw(250, 600, g);
}
@Override
public void update(GameContainer container, StateBasedGame game, int delta)
throws SlickException {
}
@Override
public int getID() {
return 3;
}
}
Exception in thread "main" java.lang.NullPointerException
at data.src.NormalMode.init(NormalMode.java:22)
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)