gpt4 book ai didi

java - 为什么我会收到此空异常错误?

转载 作者:行者123 更新时间:2023-12-01 22:38:25 25 4
gpt4 key购买 nike

我不断收到 NullExceptionError 但我不知道为什么。我知道当我引用一个尚未初始化的对象时会发生这样的错误。在这种情况下,错误显然发生在第二个文件的倒数第二行(我评论了那个),但我很确定我已经初始化了该行中的所有内容..所以我不知道应该做什么来修复错误。

顺便说一句,文件编译得很好,只有当我按下左箭头按钮时才会出现错误。

public class SnakeGame {
JFrame frame;
Draw draw;
Timer timer;
int direction;

public static void main(String[] arg) {
new SnakeGame();
}

SnakeGame() {
draw = new Draw();

frame = new JFrame("Snake");
frame.add(draw, BorderLayout.CENTER);
frame.setResizable(false);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.addKeyListener(draw);
frame.requestFocusInWindow();
}

}

-

public class Draw extends JPanel implements ActionListener, KeyListener {
SnakeGame snakeGame;
public Draw(SnakeGame snakeGame) {
this.snakeGame = snakeGame;
}

public Draw() {
setPreferredSize(new Dimension(500,500));
setBackground(Color.BLACK);
setFocusable(true);
}

@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_LEFT){
System.out.println("left pressed");
setDirection(1);
} else if (key == KeyEvent.VK_RIGHT) {
System.out.println("right pressed");
} else if (key == KeyEvent.VK_UP) {
System.out.println("UP pressed");
} else if (key == KeyEvent.VK_DOWN) {
System.out.println("down pressed");
}
}

@Override
public void keyReleased(KeyEvent e) {
}

@Override
public void keyTyped(KeyEvent e){
}

public int getDirection(){
return snakeGame.direction;
}

public void setDirection(int dir){
snakeGame.direction = dir; //According to the compiler the error occurs here
System.out.println(snakeGame.direction);
}

}

最佳答案

如果我没看错的话,初始化snakeGame的唯一方法是调用Draw(SnakeGame SnakeGame),据我所知,它从未被调用过。

在您的 SnakeGame 构造函数中,您正在调用 new Draw();,您可能希望将其更改为 new Draw(this); 。然后,您还想在另一个构造函数的无参构造函数 Draw() 中进行调用,例如setPreferredSize(new Dimension(500,500));

作为旁注:Draw 看起来很像方法名称(这就是为什么我一开始认为 Draw() 是一个 setter 而不是构造函数。你'如果您将类名称更改为 DrawPanel 等,即使用名词作为类名称、动词或“命令”作为方法名称等,那么您的生活会更轻松。

请参阅这篇维基百科文章了解基本命名约定:http://en.wikipedia.org/wiki/Naming_convention_%28programming%29

使用这些可以让你作为程序员的生活变得更轻松,并增加你从其他人那里获得帮助的机会,因为他们更有可能理解你的代码。

关于java - 为什么我会收到此空异常错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26551538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com