Hey Guys,
I am trying to better myself in Java. So i basically porgrammed the snake game as an applet and transfered it to an application just to understand the differences between applets and applications. I manage now to do the change from applet to application but now i have a nullpointerexception at the line where I call getGraphics();
So you can see and understand better what i mean i have copied my come code here.
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class SnakeGame extends Frame implements WindowListener, Runnable, KeyListener {
/**
*
*/
private static final long serialVersionUID = 1L;
Graphics gfx;
Image img;
Thread thread;
Snake snake;
Token token;
boolean gameOver;
public static void main(String[] args){
SnakeGame sg = new SnakeGame();
sg.setSize(400, 400);
sg.setVisible(true);
sg.setLayout(new FlowLayout());
sg.setResizable(false);
}
public SnakeGame() {
this.resize(400, 400);
gameOver = false;
img = createImage(400, 400);
gfx = img.getGraphics();
this.addKeyListener(this);
this.addWindowListener(this);
snake = new Snake();
token = new Token(snake);
thread = new Thread(this);
thread.start();
}
public void paint(Graphics g){
gfx.setColor(Color.black);
gfx.fillRect(0, 0, 400, 400);
if(!gameOver){
snake.draw(gfx);
token.draw(gfx);
gfx.drawString("Score " + token.getScore(), 2, 12);
}
else{
gfx.setColor(Color.red);
gfx.drawString("Game Over", 180, 150);
gfx.drawString("Score: " + token.getScore(), 180, 170);
}
g.drawImage(img, 0, 0, null);
}
public void update(Graphics g) {
paint(g);
}
public void repaint(Graphics g) {
paint(g);
}
public void run() {
for (;;) {
if (!gameOver) {
snake.move();
this.checkGameOver();
token.snakeCollision();
}
this.repaint();
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void checkGameOver() {
if (snake.getX() < 0 || snake.getX() > 396) {
gameOver = true;
}
if (snake.getY() < 0 || snake.getY() > 396) {
gameOver = true;
}
if (snake.snakeCollision()) {
gameOver = true;
}
}
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
if (!snake.isMoving()) {
if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_RIGHT
|| e.getKeyCode() == KeyEvent.VK_DOWN) {
snake.setIsMoving(true);
}
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
if (snake.getYDir() != 1) {
snake.setYDir(-1);
snake.setXDir(0);
}
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
if (snake.getYDir() != -1) {
snake.setYDir(1);
snake.setXDir(0);
}
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
if (snake.getXDir() != 1) {
snake.setXDir(-1);
snake.setYDir(0);
}
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
if (snake.getXDir() != -1) {
snake.setXDir(1);
snake.setYDir(0);
}
}
}
public void keyReleased(KeyEvent e) {
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
}
I hope you guys can help me and tell me where my error is.
Thanx in Advance,
Ricci