problem with Graphics,plz gelp

I'm trying to make pacman.Its for a university project and I haven't much time left.I have wrote some code only to show the main window but now I take a message "Null pointer exception:null".It refers to a Graphics instance and Although I tried to make many many changes I can't solve this problem.Below is the code.Sorry for the size of it..

import java.awt.*;

import javax.swing.*;

import java.io.*;

public class mainWindow extends JFrame implements Runnable

{

public char[][] mapArray = new char[22][19];

public int pacmanX;

public int pacmanY;

public int[] monsterX = new int[4];

public int[] monsterY = new int[4];

public int pacmanAnim = 0;

int currentScore = 0;

int theHighScore = 0;

int livesLeft = 3;

int direction = 6;

Thread t;

Color purple = new Color(200,0,255);

Font gameFont = new Font("TimesRoman", Font.BOLD, 20);

public mainWindow()

{

super("CEID PacMan");

setSize(456,528+70+30);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Font gameFont = new Font("TimesRoman", Font.BOLD, 20);

this.setBackground(Color.black);

}

public void paint(Graphics g)

{

paintScore(currentScore,g);

paintHighScore(theHighScore,g);

paintLives(livesLeft,g);

g.setColor(Color.green);

g.drawLine(0,60,456,60);

g.drawLine(0,60,456,60);

g.drawLine(0,588,456,588);

g.setColor(Color.white);

g.setFont(gameFont);

g.drawString("Press s to start",270,610 );

readMap();

showMap(g);

animation(g);

this.show();

}

public void paintScore(int score,Graphics display)

{

display.setColor(purple);

display.setFont(gameFont);

display.drawString("Score: "+score,50,50 );

}

public void paintHighScore(int highScore,Graphics display)

{

display.setColor(purple);

display.setFont(gameFont);

display.drawString("High Score: "+highScore,270,50 );

}

public void paintLives(int lives,Graphics display)

{

if(lives>5)

lives=5;

for(int i=0;i<lives;i++)

{

Image image = Toolkit.getDefaultToolkit().getImage("PMright1.gif");

display.drawImage(image,30+(30*i),594,this);

}

}

public void readMap()

{

String fileName = "map.txt"; //Change

try {

BufferedReader in = new BufferedReader(new FileReader(fileName));

for(int y=0;y<22;y++){

String s = in.readLine();

char[] array = s.toCharArray();

// Prints out the Character Array to confirm results

for(int x=0; x><array.length; x++) {

mapArray[y][x]=array[x]; }

}

}

catch(Exception ex) { System.out.println("ERROR: " + ex); }

}

public void showMap(Graphics display)

{

int monsterCounter=0;

for(int y=0;y<22;y++){

for(int x=0;x<19;x++){

if(mapArray[y][x]=='#'){

Image image = Toolkit.getDefaultToolkit().getImage("block.gif");

display.drawImage(image,24*x,60+y*24,this);

}

if(mapArray[y][x]=='.'){

Image image = Toolkit.getDefaultToolkit().getImage("cookie.gif");

display.drawImage(image,24*x,60+y*24,this);

}

if(mapArray[y][x]=='o'){

Image image = Toolkit.getDefaultToolkit().getImage("bigCookie.gif");

display.drawImage(image,24*x,60+y*24,this);

}

if(mapArray[y][x]=='-'){

Image image = Toolkit.getDefaultToolkit().getImage("door.gif");

display.drawImage(image,24*x,60+y*24,this);

}

if(mapArray[y][x]=='f'){

monsterX[monsterCounter]=x;

monsterY[monsterCounter]=y;

monsterCounter++;

}

if(mapArray[y][x]=='p'){

pacmanX=x;

pacmanY=y;

}

}

}

}

public void drawPacmanUp(Graphics display)

{

switch(pacmanAnim)

{

case 1:

Image PMO = Toolkit.getDefaultToolkit().getImage("PMO.gif");

display.drawImage(PMO,24*pacmanX,60+pacmanY*24,this);

case 2:

Image PMup1 = Toolkit.getDefaultToolkit().getImage("PMup1.gif");

display.drawImage(PMup1,24*pacmanX,60+pacmanY*24,this);

break;

case 3:

Image PMup2 = Toolkit.getDefaultToolkit().getImage("PMup2.gif");

display.drawImage(PMup2,24*pacmanX,60+pacmanY*24,this);

break;

default:

Image PMup3 = Toolkit.getDefaultToolkit().getImage("PMup3.gif");

display.drawImage(PMup3,24*pacmanX,60+pacmanY*24,this);

break;

}

}

public void drawPacmanDown(Graphics display)

{

switch(pacmanAnim)

{

case 1:

Image PMO = Toolkit.getDefaultToolkit().getImage("PMO.gif");

display.drawImage(PMO,24*pacmanX,60+pacmanY*24,this);

break;

case 2:

Image PMdown1 = Toolkit.getDefaultToolkit().getImage("PMdown1.gif");

display.drawImage(PMdown1,24*pacmanX,60+pacmanY*24,this);

break;

case 3:

Image PMdown2 = Toolkit.getDefaultToolkit().getImage("PMdown2.gif");

display.drawImage(PMdown2,24*pacmanX,60+pacmanY*24,this);

break;

default:

Image PMdown3 = Toolkit.getDefaultToolkit().getImage("PMdown3.gif");

display.drawImage(PMdown3,24*pacmanX,60+pacmanY*24,this);

break;

}

}

public void drawPacmanLeft(Graphics display)

{

switch(pacmanAnim)

{

case 1:

Image PMO = Toolkit.getDefaultToolkit().getImage("PMO.gif");

display.drawImage(PMO,24*pacmanX,60+pacmanY*24,this);

break;

case 2:

Image PMleft1 = Toolkit.getDefaultToolkit().getImage("PMleft1.gif");

display.drawImage(PMleft1,24*pacmanX,60+pacmanY*24,this);

break;

case 3:

Image PMleft2 = Toolkit.getDefaultToolkit().getImage("PMleft2.gif");

display.drawImage(PMleft2,24*pacmanX,60+pacmanY*24,this);

break;

default:

Image PMleft3 = Toolkit.getDefaultToolkit().getImage("PMleft3.gif");

display.drawImage(PMleft3,24*pacmanX,60+pacmanY*24,this);

break;

}

}

public void drawPacmanRight(Graphics display)

{

switch(pacmanAnim)

{

case 1:

Image PMO = Toolkit.getDefaultToolkit().getImage("PMO.gif");

display.drawImage(PMO,24*pacmanX,60+pacmanY*24,this);

break;

case 2:

Image PMright1 = Toolkit.getDefaultToolkit().getImage("PMright1.gif");

display.drawImage(PMright1,24*pacmanX,60+pacmanY*24,this);

break;

case 3:

Image PMright2 = Toolkit.getDefaultToolkit().getImage("PMright2.gif");

display.drawImage(PMright2,24*pacmanX,60+pacmanY*24,this);

break;

default:

Image PMright3 = Toolkit.getDefaultToolkit().getImage("PMright3.gif");

display.drawImage(PMright3,24*pacmanX,60+pacmanY*24,this);

break;

}

}

public void animation(Graphics display)

{

++pacmanAnim;

Image PMright2 = Toolkit.getDefaultToolkit().getImage("blank.gif");

display.drawImage(PMright2,24*pacmanX,60+pacmanY*24,this);

System.out.print(" "+pacmanAnim);

drawPacman(display);

}

public void drawPacman(Graphics g)

{

if (direction == 4 )

drawPacmanLeft(g);

else if (direction == 6)

drawPacmanRight(g);

else if (direction == 8)

drawPacmanUp(g);

else

drawPacmanDown(g);

}

public void run()

{

long starttime;

Graphics g;

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

g=getGraphics();

while(true)

{

starttime=System.currentTimeMillis();

try

{

paint(g);

starttime += 500;

Thread.sleep(Math.max(0, starttime-System.currentTimeMillis()));

}

catch (InterruptedException e)

{

break;

}

}

}

}>

[7915 byte] By [guybr@sh_a] at [2007-10-3 3:36:15]
# 1

You should load all of your images at startup. Using Toolkit methods requires a MediaTracker to load the images. See MediaTracker api for example code. Keep them in an array(s) and access them as needed throughout your app. Other comments in code below:

import java.awt.*;

import javax.swing.*;

import java.io.*;

public class MW extends JFrame implements Runnable

{

public char[][] mapArray = new char[22][19];

public int pacmanX;

public int pacmanY;

public int[] monsterX = new int[4];

public int[] monsterY = new int[4];

public int pacmanAnim = 0;

int currentScore = 0;

int theHighScore = 0;

int livesLeft = 3;

int direction = 6;

Thread t;

Color purple = new Color(200,0,255);

Font gameFont = new Font("TimesRoman", Font.BOLD, 20);

public MW()

{

super("CEID PacMan");

setSize(456,528+70+30);

setDefaultCloseOperation(EXIT_ON_CLOSE);

Font gameFont = new Font("TimesRoman", Font.BOLD, 20);

this.setBackground(Color.black);

setVisible(true);

}

public void paint(Graphics g)

{

paintScore(currentScore,g);

paintHighScore(theHighScore,g);

paintLives(livesLeft,g);

g.setColor(Color.green);

g.drawLine(0,60,456,60);

g.drawLine(0,60,456,60);

g.drawLine(0,588,456,588);

g.setColor(Color.white);

g.setFont(gameFont);

g.drawString("Press s to start",270,610 );

//readMap();not here, do this in your constructor

showMap(g);

animation(g);

//this.setVisible(true);ouch, don't do this -> put in constructor

}

public void paintScore(int score,Graphics display)

{

display.setColor(purple);

display.setFont(gameFont);

display.drawString("Score: "+score,50,50 );

}

public void paintHighScore(int highScore,Graphics display)

{

display.setColor(purple);

display.setFont(gameFont);

display.drawString("High Score: "+highScore,270,50 );

}

public void paintLives(int lives,Graphics display)

{

if(lives>5)

lives=5;

for(int i=0;i<lives;i++)

{

Image image = Toolkit.getDefaultToolkit().getImage("PMright1.gif");

display.drawImage(image,30+(30*i),594,this);

}

}

public void readMap()

{

String fileName = "map.txt"; //Change

try

{

BufferedReader in = new BufferedReader(new FileReader(fileName));

for(int y=0;y<22;y++)

{

String s = in.readLine();

char[] array = s.toCharArray();

// Prints out the Character Array to confirm results

for(int x=0; x><array.length; x++)

{

mapArray[y][x]=array[x];

}

}

}

catch(Exception ex) { System.out.println("ERROR: " + ex); }

}

public void showMap(Graphics display)

{

int monsterCounter=0;

for(int y=0;y<22;y++){

for(int x=0;x<19;x++){

if(mapArray[y][x]=='#'){

Image image = Toolkit.getDefaultToolkit().getImage("block.gif");

display.drawImage(image,24*x,60+y*24,this);

}

if(mapArray[y][x]=='.'){

Image image = Toolkit.getDefaultToolkit().getImage("cookie.gif");

display.drawImage(image,24*x,60+y*24,this);

}

if(mapArray[y][x]=='o'){

Image image = Toolkit.getDefaultToolkit().getImage("bigCookie.gif");

display.drawImage(image,24*x,60+y*24,this);

}

if(mapArray[y][x]=='-'){

Image image = Toolkit.getDefaultToolkit().getImage("door.gif");

display.drawImage(image,24*x,60+y*24,this);

}

if(mapArray[y][x]=='f'){

monsterX[monsterCounter]=x;

monsterY[monsterCounter]=y;

monsterCounter++;

}

if(mapArray[y][x]=='p'){

pacmanX=x;

pacmanY=y;

}

}

}

}

public void drawPacmanUp(Graphics display)

{

switch(pacmanAnim)

{

case 1:

Image PMO = Toolkit.getDefaultToolkit().getImage("PMO.gif");

display.drawImage(PMO,24*pacmanX,60+pacmanY*24,this);

case 2:

Image PMup1 = Toolkit.getDefaultToolkit().getImage("PMup1.gif");

display.drawImage(PMup1,24*pacmanX,60+pacmanY*24,this);

break;

case 3:

Image PMup2 = Toolkit.getDefaultToolkit().getImage("PMup2.gif");

display.drawImage(PMup2,24*pacmanX,60+pacmanY*24,this);

break;

default:

Image PMup3 = Toolkit.getDefaultToolkit().getImage("PMup3.gif");

display.drawImage(PMup3,24*pacmanX,60+pacmanY*24,this);

//break;

}

}

public void drawPacmanDown(Graphics display)

{

switch(pacmanAnim)

{

case 1:

Image PMO = Toolkit.getDefaultToolkit().getImage("PMO.gif");

display.drawImage(PMO,24*pacmanX,60+pacmanY*24,this);

break;

case 2:

Image PMdown1 = Toolkit.getDefaultToolkit().getImage("PMdown1.gif");

display.drawImage(PMdown1,24*pacmanX,60+pacmanY*24,this);

break;

case 3:

Image PMdown2 = Toolkit.getDefaultToolkit().getImage("PMdown2.gif");

display.drawImage(PMdown2,24*pacmanX,60+pacmanY*24,this);

break;

default:

Image PMdown3 = Toolkit.getDefaultToolkit().getImage("PMdown3.gif");

display.drawImage(PMdown3,24*pacmanX,60+pacmanY*24,this);

//break;

}

}

public void drawPacmanLeft(Graphics display)

{

switch(pacmanAnim)

{

case 1:

Image PMO = Toolkit.getDefaultToolkit().getImage("PMO.gif");

display.drawImage(PMO,24*pacmanX,60+pacmanY*24,this);

break;

case 2:

Image PMleft1 = Toolkit.getDefaultToolkit().getImage("PMleft1.gif");

display.drawImage(PMleft1,24*pacmanX,60+pacmanY*24,this);

break;

case 3:

Image PMleft2 = Toolkit.getDefaultToolkit().getImage("PMleft2.gif");

display.drawImage(PMleft2,24*pacmanX,60+pacmanY*24,this);

break;

default:

Image PMleft3 = Toolkit.getDefaultToolkit().getImage("PMleft3.gif");

display.drawImage(PMleft3,24*pacmanX,60+pacmanY*24,this);

//break;

}

}

public void drawPacmanRight(Graphics display)

{

switch(pacmanAnim)

{

case 1:

Image PMO = Toolkit.getDefaultToolkit().getImage("PMO.gif");

display.drawImage(PMO,24*pacmanX,60+pacmanY*24,this);

break;

case 2:

Image PMright1 = Toolkit.getDefaultToolkit().getImage("PMright1.gif");

display.drawImage(PMright1,24*pacmanX,60+pacmanY*24,this);

break;

case 3:

Image PMright2 = Toolkit.getDefaultToolkit().getImage("PMright2.gif");

display.drawImage(PMright2,24*pacmanX,60+pacmanY*24,this);

break;

default:

Image PMright3 = Toolkit.getDefaultToolkit().getImage("PMright3.gif");

display.drawImage(PMright3,24*pacmanX,60+pacmanY*24,this);

//break;

}

}

public void animation(Graphics display)

{

++pacmanAnim;

Image PMright2 = Toolkit.getDefaultToolkit().getImage("blank.gif");

display.drawImage(PMright2,24*pacmanX,60+pacmanY*24,this);

System.out.print(" "+pacmanAnim);

drawPacman(display);

}

public void drawPacman(Graphics g)

{

if (direction == 4 )

drawPacmanLeft(g);

else if (direction == 6)

drawPacmanRight(g);

else if (direction == 8)

drawPacmanUp(g);

else

drawPacmanDown(g);

}

public void run()

{

long starttime;

Graphics g; // this will always be null

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

g=getGraphics();

while(true)

{

starttime=System.currentTimeMillis();

try

{

//paint(g);ouch - use repaint instead:

repaint();// ask this component to repaint itself

starttime += 500;

Thread.sleep(Math.max(0, starttime-System.currentTimeMillis()));

}

catch (InterruptedException e)

{

break;

}

}

}

public static void main(String[] args)

{

new MW();

}

}

>

74philipa at 2007-7-14 21:31:11 > top of Java-index,Security,Cryptography...
# 2
Thank you very much for your help.I'm trying to make this changes anf hope to have good results.
guybr@sh_a at 2007-7-14 21:31:11 > top of Java-index,Security,Cryptography...
# 3

I tried to fix the code,as I could, but I take this massage:

An error occured in a file in a file for which the source cannot be found.

class: source line number: java.awt.EvenDispatchThread:114

nullpointerException:null(in java.awt.EvenDispatchThread)

I also don't know where to put paint() method.

Another problem I have is that I again took a "nulpointerexception" and

the line"display.setColor(purple);" was marked..

Every kind of help would be great..

This is my "new" code..

import java.awt.*;

import javax.swing.*;

import java.io.*;

import java.awt.MediaTracker;

import java.awt.Image;

public class mainW extends JFrame implements Runnable

{

MediaTracker tracker;

Image block;

Image cookie;

Image bigCookie;

Image door;

Image blank;

Image animZero;

Image animRight[] = new Image[3];

Image animLeft[] = new Image[3];

Image animUp[] = new Image[3];

Image animDown[] = new Image[3];

Image monster[] = new Image[2];

//πίνακας που περιέχει το χάρτη του παιχνιδιού

public char[][] mapArray = new char[22][19];

//μεταβλητές που κρατάνε τις συντεταγμένες του pacman

public int pacmanX;

public int pacmanY;

//πινακες συντεταγμένων που κρατάνε τις συντεταγμένες των

//τεσσάρων τεράτων

public int[] monsterX = new int[4];

public int[] monsterY = new int[4];

//μεταβλητή που κρατάεi την κaθε εικόνα για το animation του pacman

public int pacmanAnim = 0;

//πληροφορίες παιχνιδιού

int currentScore = 0;

int theHighScore = 0;

int livesLeft = 3;

//κατεύθυνση προς την οποία είναι στραμένος ο pacman

int direction = 6;

Thread t;

Color purple = new Color(200,0,255);

Font gameFont = new Font("TimesRoman", Font.BOLD, 20);

public mainW()

{

super("CEID PacMan");

setSize(456,528+70+30);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Font gameFont = new Font("TimesRoman", Font.BOLD, 20);

this.setBackground(Color.black);

init();

readMap();

setVisible(true);

}

public void init() {

tracker = new MediaTracker(this);

block = Toolkit.getDefaultToolkit().getImage("block.gif");

tracker.addImage(block, 0);

cookie = Toolkit.getDefaultToolkit().getImage("cookie.gif");

tracker.addImage(cookie, 1);

bigCookie = Toolkit.getDefaultToolkit().getImage("bigCookie.gif");

tracker.addImage(bigCookie, 2);

door = Toolkit.getDefaultToolkit().getImage("door.gif");

tracker.addImage(door, 3);

blank = Toolkit.getDefaultToolkit().getImage("blank.gif");

tracker.addImage(blank, 4);

animZero = Toolkit.getDefaultToolkit().getImage("animZero.gif");

tracker.addImage(animZero, 5);

for (int i = 1; i < 3; i++) {

animRight = Toolkit.getDefaultToolkit().getImage("PMright"+i+".gif");

tracker.addImage(animRight[i-1], 6);

}

for (int i = 1; i < 3; i++) {

animLeft = Toolkit.getDefaultToolkit().getImage("PMleft"+i+".gif");

tracker.addImage(animLeft[i-1], 7);

}

for (int i = 1; i < 3; i++) {

animUp = Toolkit.getDefaultToolkit().getImage("PMup"+i+".gif");

tracker.addImage(animUp[i-1], 8);

}

for (int i = 1; i < 3; i++) {

animDown = Toolkit.getDefaultToolkit().getImage("PMdown"+i+".gif");

tracker.addImage(animDown[i-1], 6);

}

}

public void paint(Graphics g)

{

paintScore(currentScore,g);

paintHighScore(theHighScore,g);

paintLives(livesLeft,g);

//σχεδίαση διαχωριστικών γραμμών του χάρτη

g.setColor(Color.green);

g.drawLine(0,60,456,60);

g.drawLine(0,60,456,60);

g.drawLine(0,588,456,588);

//εμφάνιση πληροφορίας στην οθόνη

g.setColor(Color.white);

g.setFont(gameFont);

g.drawString("Press s to start",270,610 );

showMap(g);

animation(g);

}

//εμφανίζει στην οθόνη το score που παίρνει ως παράμετρο

public void paintScore(int score,Graphics display)

{

display.setColor(purple);

display.setFont(gameFont);

display.drawString("Score: "+score,50,50 );

}

//εμφανίζει στην οθόνη το high score που παίρνει ως παράμετρο

public void paintHighScore(int highScore,Graphics display)

{

display.setColor(purple);

display.setFont(gameFont);

display.drawString("High Score: "+highScore,270,50 );

}

//εμφανίζει στην οθόνη τις ζωές που απομένουν στον παίκτη

//εάν είναι περισσότερες του 5, εμφανίζονται μόνο τρεις

public void paintLives(int lives,Graphics display)

{

if(lives>5)

lives=5;

for(int i=0;i<lives;i++)

{

display.drawImage(animRight[0],30+(30*i),594,this);

}

}

//&#948;&#953;&#945;&#946;&#940;&#950;&#949;&#953; &#964;&#945; &#948;&#949;&#948;&#959;&#956;&#941;&#957;&#945; &#945;&#960;&#972; &#964;&#959; &#945;&#961;&#967;&#949;&#943;&#959; map.txt &#954;&#945;&#953; &#964;&#945; &#956;&#949;&#964;&#945;&#966;&#941;&#961;&#949;&#953; &#963;&#949; &#941;&#957;&#945;&#957;

//&#948;&#953;&#963;&#948;&#953;&#940;&#963;&#964;&#945;&#964;&#959; &#960;&#943;&#957;&#945;&#954;&#945;, &#964;&#959;&#957; mapArray

public void readMap()

{

String fileName = "map.txt";

try {

BufferedReader in = new BufferedReader(new FileReader(fileName));

for(int y=0;y<22;y++){

// &#948;&#953;&#945;&#946;&#940;&#950;&#949;&#964;&#945;&#953; &#945;&#960;&#949;&#965;&#952;&#949;&#943;&#945;&#962; &#951; &#960;&#961;&#974;&#964;&#951; &#947;&#961;&#945;&#956;&#956;&#942;

String s = in.readLine();

// &#954;&#945;&#953; &#956;&#949;&#964;&#945;&#964;&#961;&#941;&#960;&#949;&#964;&#945;&#953; &#963;&#949; &#948;&#953;&#963;&#948;&#953;&#940;&#963;&#964;&#945;&#964;&#959; &#960;&#943;&#957;&#945;&#954;&#945; &#967;&#945;&#961;&#945;&#954;&#964;&#942;&#961;&#969;&#957;

char[] array = s.toCharArray();

// Prints out the Character Array to confirm results

for(int x=0; x><array.length; x++) {

mapArray[y][x]=array[x]; }

}

}

catch(Exception ex) { System.out.println("ERROR: " + ex); }

}

//&#949;&#956;&#966;&#945;&#957;&#943;&#950;&#949;&#953; &#959;&#964;&#953; &#965;&#960;&#940;&#961;&#967;&#949;&#953; &#963;&#964;&#959;&#957; &#960;&#943;&#957;&#945;&#954;&#945; mapArray &#963;&#964;&#951;&#957; &#959;&#952;&#972;&#957;&#951;

public void showMap(Graphics display)

{

int monsterCounter=0;

for(int y=0;y<22;y++){

for(int x=0;x<19;x++){

if(mapArray[y][x]=='#'){

display.drawImage(block,24*x,60+y*24,this);

}

if(mapArray[y][x]=='.'){

display.drawImage(cookie,24*x,60+y*24,this);

}

if(mapArray[y][x]=='o'){

display.drawImage(bigCookie,24*x,60+y*24,this);

}

if(mapArray[y][x]=='-'){

display.drawImage(door,24*x,60+y*24,this);

}

if(mapArray[y][x]==' '){

display.drawImage(blank,24*x,60+y*24,this);

}

if(mapArray[y][x]=='f'){

monsterX[monsterCounter]=x;

monsterY[monsterCounter]=y;

monsterCounter++;

}

if(mapArray[y][x]=='p'){

pacmanX=x;

pacmanY=y;

}

}

}

}

public void drawPacmanUp(Graphics display)

{

switch(pacmanAnim)

{

case 1:

display.drawImage(animZero,24*pacmanX,60+pacmanY*24,this);

case 2:

display.drawImage(animUp[0],24*pacmanX,60+pacmanY*24,this);

break;

case 3:

display.drawImage(animUp[1],24*pacmanX,60+pacmanY*24,this);

break;

default:

display.drawImage(animUp[2],24*pacmanX,60+pacmanY*24,this);

}

}

public void drawPacmanDown(Graphics display)

{

switch(pacmanAnim)

{

case 1:

display.drawImage(animZero,24*pacmanX,60+pacmanY*24,this);

break;

case 2:

display.drawImage(animDown[0],24*pacmanX,60+pacmanY*24,this);

break;

case 3:

display.drawImage(animDown[1],24*pacmanX,60+pacmanY*24,this);

break;

default:

display.drawImage(animDown[2],24*pacmanX,60+pacmanY*24,this);

}

}

public void drawPacmanLeft(Graphics display)

{

switch(pacmanAnim)

{

case 1:

display.drawImage(animZero,24*pacmanX,60+pacmanY*24,this);

break;

case 2:

display.drawImage(animLeft[0],24*pacmanX,60+pacmanY*24,this);

break;

case 3:

display.drawImage(animLeft[1],24*pacmanX,60+pacmanY*24,this);

break;

default:

display.drawImage(animLeft[2],24*pacmanX,60+pacmanY*24,this);

}

}

public void drawPacmanRight(Graphics display)

{

switch(pacmanAnim)

{

case 1:

display.drawImage(animZero,24*pacmanX,60+pacmanY*24,this);

break;

case 2:

display.drawImage(animRight[0],24*pacmanX,60+pacmanY*24,this);

break;

case 3:

display.drawImage(animRight[1],24*pacmanX,60+pacmanY*24,this);

break;

default:

display.drawImage(animRight[2],24*pacmanX,60+pacmanY*24,this);

}

}

public void animation(Graphics display)

{

++pacmanAnim;

System.out.print(" "+pacmanAnim);

drawPacman(display);

}

public void drawPacman(Graphics g)

{

if (direction == 4 )

drawPacmanLeft(g);

else if (direction == 6)

drawPacmanRight(g);

else if (direction == 8)

drawPacmanUp(g);

else

drawPacmanDown(g);

}

public void run()

{

long starttime;

Graphics g; // this will always be null

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

g=getGraphics();

while(true)

{

starttime=System.currentTimeMillis();

try

{

repaint();// ask this component to repaint itself

starttime += 500;

Thread.sleep(Math.max(0, starttime-System.currentTimeMillis()));

}

catch (InterruptedException e)

{

break;

}

}

}

public static void main(String[] args)

{

new mainW();

}

}>

guybr@sh_a at 2007-7-14 21:31:11 > top of Java-index,Security,Cryptography...
# 4
please ignore confused comments.I should have removed them because they are in greek..
guybr@sh_a at 2007-7-14 21:31:11 > top of Java-index,Security,Cryptography...
# 5

Another problem I have is that I again took a "nulpointerexception" and

the line "display.setColor(purple);" was marked..

The only places I see that line is in the paintScore and paintHighScore methods. The console error message will usually give the line number which can help pinpoint the trouble. Use println statements to print the local variable display in these methods to see if it is null. In the code you posted these methods are only called from the paint method which will have a valid graphics context, g. So find out who is calling these methods with a null graphics context.

If you don't want to use buttons for the animation control you can add a MouseAdapter to your JFrame content pane and listen for mousePressed or mouseClicked events that occur below the lower green line. Call the start method from the mouse code.

3 more lines for the init method

tracker.addImage(animDown[i-1], 6);

}

// load images

try {

tracker.waitForAll();

} catch(InterruptedException ie) { /* recover */ }

}

public void drawPacmanUp(Graphics display)

{

switch(pacmanAnim)

{

case 1:

display.drawImage(animZero,24*pacmanX,60+pacmanY*24,this);

// falls through to case 2

case 2:

Here's a suggestion for organizing things.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class MW3 extends JFrame implements Runnable

{

GamePanel gamePanel;

// other member variable declarations

Font gameFont = new Font("TimesRoman", Font.BOLD, 20);

Thread t;

boolean animating = false;

int pacmanAnim = 0;

int southHeight;

public MW3()

{

readMap();

loadImages();

gamePanel = new GamePanel();

getContentPane().add(gamePanel);

getContentPane().add(getControlPanel(), "South");

setDefaultCloseOperation(EXIT_ON_CLOSE);

setSize(456,528+70+30);

setLocation(400,50);

setVisible(true);

}

/** one way to encapsulate the drawing code */

private class GamePanel extends JPanel

{

public GamePanel()

{

setBackground(Color.black);

}

protected void paintComponent(Graphics g)

{

super.paintComponent(g);

// if you set the font here then if will

// carry through to all the other methods

// System.out.println(g) to see graphics font

// don't have JFrame title bar to avoid now

// so use offset to avoid having to deal with

// the misery of hard-coded values

int offset = getTopLevelAncestor().getInsets().top;

//System.out.printf("offset = %d%n", offset);

paintScore(g);

paintHighScore(g);

paintLives(g);

//篦邃哚箸 溟狩轶糸掰?泷犰忐?麸?鬈耵?/font>

g.setColor(Color.green);

g.drawLine(0,60-offset,456,60-offset);

// to clear new south button panel

offset += southHeight;

g.drawLine(0,588-offset,456,588-offset);

g.setColor(Color.red);

//屐鲕黹箸 痣珩秭锺哚?篝珥 镨?/font>

g.setColor(Color.white);

g.setFont(gameFont);

g.drawString("Press s to start",270,610-offset);

showMap(g);

drawPacman(g);

}

private void paintScore(Graphics g)

{

// since currentScore is a member variable, ie, in class

// scope, we don't need to pass it as a local variable

}

private void paintHighScore(Graphics g)

{

// same with theHighScore

}

private void paintLives(Graphics g)

{

//...

}

private void showMap(Graphics g)

{

//

}

public void drawPacman(Graphics g)

{

// as before

}

// other painting methods...

}

private void animate()

{

// set state variables to control the animation

++pacmanAnim;

// draw the new state

repaint();

}

public void run()

{

while(animating)

{

try

{

Thread.sleep(500);

}

catch(InterruptedException ie)

{

animating = false;

}

animate();

}

}

private JPanel getControlPanel()

{

final JButton start = new JButton("start");

final JButton stop = new JButton("stop");

ActionListener l = new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

JButton button = (JButton)e.getSource();

if(button == start)

start();

else if(button == stop)

stop();

}

};

start.addActionListener(l);

stop.addActionListener(l);

JPanel panel = new JPanel();

panel.add(start);

panel.add(stop);

southHeight = panel.getPreferredSize().height;

System.out.println("southHeight = " + southHeight);

return panel;

}

public void start()

{

if(!animating)

{

animating = true;

t = new Thread(this);

t.setPriority(Thread.NORM_PRIORITY);

t.start();

}

}

private void stop()

{

animating = false;

t = null;

}

private void readMap()

{

// map reading code

}

private void loadImages()

{

// code form init method

}

public static void main(String[] args)

{

new MW3();

}

}

74philipa at 2007-7-14 21:31:11 > top of Java-index,Security,Cryptography...
# 6

Thank you very much.You really solved my problems.But now I have another question.I used KeyListener interface but after pressing start, pressing keys does nothing.I can't find where to put addKeyListener() statement.This is again the new code...

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

public class MW3 extends JFrame implements Runnable,KeyListener

{

GamePanel gamePanel;

// other member variable declarations

Font gameFont = new Font("TimesRoman", Font.BOLD, 20);

Thread t;

boolean animating = false;

int pacmanAnim = 0;

int southHeight;

MediaTracker tracker = null;

private char direction;

Graphics display;

int score;

int highScore;

int lives;

//πίνακας που περιέχει το χάρτη του παιχνιδιού

public char[][] mapArray = new char[22][19];

//μεταβλητές που κρατάνε τις συντεταγμένες του pacman

public int pacmanX;

public int pacmanY;

//πινακες συντεταγμένων που κρατάνε τις συντεταγμένες των

//τεσσάρων τεράτων

public int[] monsterX = new int[4];

public int[] monsterY = new int[4];

Image block;

Image cookie;

Image bigCookie;

Image door;

Image blank;

Image animZero;

Image animRight[] = new Image[3];

Image animLeft[] = new Image[3];

Image animUp[] = new Image[3];

Image animDown[] = new Image[3];

Image monster[] = new Image[2];

public MW3()

{

readMap();

loadImages();

gamePanel = new GamePanel();

getContentPane().add(gamePanel);

getContentPane().add(getControlPanel(), "South");

setDefaultCloseOperation(EXIT_ON_CLOSE);

setSize(456,670);

setLocation(400,50);

setVisible(true);

score = 0;

highScore = 0;

direction = 'r';

}

/** one way to encapsulate the drawing code */

private class GamePanel extends JPanel

{

public GamePanel()

{

setBackground(Color.black);

}

protected void paintComponent(Graphics g)

{

super.paintComponent(g);

// if you set the font here then if will

// carry through to all the other methods

// System.out.println(g) to see graphics font

// don't have JFrame title bar to avoid now

// so use offset to avoid having to deal with

// the misery of hard-coded values

int offset = getTopLevelAncestor().getInsets().top;

g.setColor(Color.green);

showMap(g);

drawPacman(g);

paintScore(g);

paintHighScore(g);

g.drawImage(animZero,30+(30*1),660,this);

}

private void paintScore(Graphics g)

{

g.setFont(gameFont);

g.drawString("Score: "+score,50,20 );

}

private void paintHighScore(Graphics g)

{

g.setFont(gameFont);

g.drawString("Score: "+highScore,280,20 );

}

private void paintLives(Graphics g)

{

// if(lives>5)

//lives=5;

// for(int i=0;i<lives;i++){

g.drawImage(animZero,30+(30*1),650,this);

// }

}

private void showMap(Graphics g)

{

int monsterCounter=0;

for(int y=0;y<22;y++){

for(int x=0;x<19;x++){

if(mapArray[y][x]=='#'){

g.drawImage(block,24*x,35+y*24,this);

}

if(mapArray[y][x]=='.'){

g.drawImage(cookie,24*x,35+y*24,this);

}

if(mapArray[y][x]=='o'){

g.drawImage(bigCookie,24*x,35+y*24,this);

}

if(mapArray[y][x]=='-'){

g.drawImage(door,24*x,35+y*24,this);

}

if(mapArray[y][x]==' '){

g.drawImage(blank,24*x,35+y*24,this);

}

if(mapArray[y][x]=='f'){

monsterX[monsterCounter]=x;

monsterY[monsterCounter]=y;

monsterCounter++;

}

if(mapArray[y][x]=='p'){

pacmanX = 24*x;

pacmanY = 35+y*24;

}

}

}

}

public void drawPacman(Graphics g)

{

if(direction == 'r'){

if(pacmanAnim % 4 == 0)

g.drawImage(animZero,pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 1)

g.drawImage(animRight[0],pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 2)

g.drawImage(animRight[1],pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 3)

g.drawImage(animRight[2],pacmanX,pacmanY,this);

}

if(direction == 'l'){

if(pacmanAnim % 4 == 0)

g.drawImage(animZero,pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 1)

g.drawImage(animLeft[0],pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 2)

g.drawImage(animLeft[1],pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 3)

g.drawImage(animLeft[2],pacmanX,pacmanY,this);

}

if(direction == 'u'){

if(pacmanAnim % 4 == 0)

g.drawImage(animZero,pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 1)

g.drawImage(animUp[0],pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 2)

g.drawImage(animUp[1],pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 3)

g.drawImage(animUp[2],pacmanX,pacmanY,this);

}

if(direction == 'd'){

if(pacmanAnim % 4 == 0)

g.drawImage(animZero,pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 1)

g.drawImage(animDown[0],pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 2)

g.drawImage(animDown[1],pacmanX,pacmanY,this);

else if(pacmanAnim % 4 == 3)

g.drawImage(animDown[2],pacmanX,pacmanY,this);

}

}

// other painting methods...

}

private void animate()

{

// set state variables to control the animation

++pacmanAnim;

// draw the new state

repaint();

}

public void run()

{

while(animating)

{

try

{

Thread.sleep(250);

}

catch(InterruptedException ie)

{

animating = false;

}

animate();

}

}

private JPanel getControlPanel()

{

final JButton start = new JButton("start");

final JButton stop = new JButton("stop");

ActionListener l = new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

JButton button = (JButton)e.getSource();

if(button == start)

start();

else if(button == stop)

stop();

}

};

start.addActionListener(l);

stop.addActionListener(l);

addKeyListener(this);

JPanel panel = new JPanel();

panel.add(start);

panel.add(stop);

southHeight = panel.getPreferredSize().height;

return panel;

}

public void start()

{

if(!animating)

{

animating = true;

t = new Thread(this);

t.setPriority(Thread.NORM_PRIORITY);

t.start();

}

}

private void stop()

{

animating = false;

t = null;

}

private void readMap()

{

String fileName = "map.txt";

try {

BufferedReader in = new BufferedReader(new FileReader(fileName));

for(int y=0;y<22;y++){

// &#948;&#953;&#945;&#946;&#940;&#950;&#949;&#964;&#945;&#953; &#945;&#960;&#949;&#965;&#952;&#949;&#943;&#945;&#962; &#951; &#960;&#961;&#974;&#964;&#951; &#947;&#961;&#945;&#956;&#956;&#942;

String s = in.readLine();

// &#954;&#945;&#953; &#956;&#949;&#964;&#945;&#964;&#961;&#941;&#960;&#949;&#964;&#945;&#953; &#963;&#949; &#948;&#953;&#963;&#948;&#953;&#940;&#963;&#964;&#945;&#964;&#959; &#960;&#943;&#957;&#945;&#954;&#945; &#967;&#945;&#961;&#945;&#954;&#964;&#942;&#961;&#969;&#957;

char[] array = s.toCharArray();

// Prints out the Character Array to confirm results

for(int x=0; x><array.length; x++) {

mapArray[y][x]=array[x]; }

}

}

catch(Exception ex) { System.out.println("ERROR: " + ex); }

}

private void loadImages()

{

tracker = new MediaTracker(this);

block = Toolkit.getDefaultToolkit().getImage("block.gif");

tracker.addImage(block, 0);

cookie = Toolkit.getDefaultToolkit().getImage("cookie.gif");

tracker.addImage(cookie, 0);

bigCookie = Toolkit.getDefaultToolkit().getImage("bigCookie.gif");

tracker.addImage(bigCookie, 0);

door = Toolkit.getDefaultToolkit().getImage("door.gif");

tracker.addImage(door, 0);

animZero = Toolkit.getDefaultToolkit().getImage("PM0.gif");

tracker.addImage(animZero, 0);

blank = Toolkit.getDefaultToolkit().getImage("blank.gif");

tracker.addImage(blank, 0);

for (int i = 0; i ><3; i++) {

animRight = Toolkit.getDefaultToolkit().getImage("PMright"+(i+1)+".gif");

tracker.addImage(animRight, 0);

}

for (int i = 0; i < 3; i++) {

animLeft = Toolkit.getDefaultToolkit().getImage("PMleft"+(i+1)+".gif");

tracker.addImage(animLeft, 0);

}

for (int i = 0; i <3; i++) {

animUp = Toolkit.getDefaultToolkit().getImage("PMup"+(i+1)+".gif");

tracker.addImage(animUp, 0);

}

for (int i = 0; i < 3; i++) {

animDown = Toolkit.getDefaultToolkit().getImage("PMdown"+(i+1)+".gif");

tracker.addImage(animDown, 0);

}

try {

tracker.waitForAll();

} catch(InterruptedException ie) { /* recover */ }

}

public void keyPressed(KeyEvent ke){

int keyCode = ke.getKeyCode();

int moveX = 0;

int moveY = 0;

if(keyCode == KeyEvent.VK_LEFT){

direction = 'l';

System.out.print("left");

moveX = -5;

moveY = 0;

}

else if(keyCode == KeyEvent.VK_RIGHT){

direction = 'r';

System.out.print("right");

moveX = 5;

moveY = 0;

}

else if(keyCode == KeyEvent.VK_DOWN){

direction = 'd';

moveX = 0;

moveY = 5;

}

else if(keyCode == KeyEvent.VK_UP){

direction = 'u';

moveX = 0;

moveY = -5;

}

pacmanX = pacmanX + moveX;

pacmanY = pacmanY + moveY;

repaint();

}

public void keyReleased(KeyEvent ke){}

public void keyTyped(KeyEvent ke){}

public boolean isFocusable(){

return true;

}

public static void main(String[] args)

{

new MW3();

}

}

guybr@sh_a at 2007-7-14 21:31:11 > top of Java-index,Security,Cryptography...