Я продолжаю получать NullExceptionError, но я не знаю почему. Я знаю, что такая ошибка возникает, когда я ссылаюсь на объект, который еще не был инициализирован. В этой ситуации ошибка, по-видимому, возникает во второй последней строке второго файла (я прокомментировал это), но я уверен, что я инициализировал все в этой строке. Поэтому я не знаю, что мне нужно сделать, чтобы исправить Ошибка.Зачем мне это 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'? –
И это не компилятор, который дает вам «NullPointerException», это среда выполнения. –
Возможно, вы должны использовать 'draw = new Draw (this)' –