problemas NulklPOinterexcepcion ayuda por favor

Agustin Silva
25 de Octubre del 2009
hola yo estoy intentando hacer algo con J2ME pero me surge un problema y no se como resolverlo por que no se como ver donde esta el problema, al cargalo en el compilador(Wireless Toolkit 2.5.2) anda perfecto no me da ningun error, pero al momento de cargalo en el celular me da error "java/lang/nullpointerexcepction", y no se como identificar donde esta el error este es el codigo les agradeceria si me ayudan.Los celulares en el lo probe son Nokia 6131 y Lg Kp550

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.*;
public class CanvasJuego extends GameCanvas implements Runnable {
private boolean done;
private int posx, posy,newx,newy,Mapa,estadoHero=0,time=0,framehero=0,scrollX=0,scrollY=0,scrollheroX=0,scrollheroY=0;
private int frameTime;
private Sprite hero;
private Sprite[] tile=new Sprite[250];
private int[] maxMapX = new int[100];
private int[] maxMapY = new int[100];
private int[] tileX = new int[250];
private int[] tileY = new int[250];
private int[] map0 = {0,1,2,3,1,1,1,1,2,1,1,1,1,1,1,1};
public CanvasJuego() {
super(true);
done = true;
//Variables
Mapa=0;
maxMapX[0]=4;
maxMapY[0]=4;
//Hero
hero = createHero();
hero.setFrame(0);
//Tiles
for(int i=0; i<250;i+=1)
{
tile[i]=null;
tileX[i]=0;
tileY[i]=0;
}
createMap();
//
frameTime = 20;
posx = 0;
posy = 0;
}
public void createMap()
{
int numtile=0;
for(int h=0;h<(maxMapX[Mapa]);h+=1)
{
for(int v=0;v<(maxMapY[Mapa]);v+=1)
{
tile[numtile]=createTile(map0[numtile]);
tileX[numtile]=0+32*h;
tileY[numtile]=0+32*v;
tile[numtile].setRefPixelPosition(tileX[numtile], tileY[numtile]);
numtile+=1;
}
}
}
public void start()
{
done = false;
new Thread(this).start();
}
public void stop() {}
public void run()
{
long start, end;
int duration;
Graphics g = getGraphics();
// GameLoop
while (!done) {
start = System.currentTimeMillis();
input();
colisionTile();
Scroll();
render(g);
animarHero();
// sincronización
end = System.currentTimeMillis();
duration = (int)(end - start);
if (duration < frameTime) {
try {
Thread.sleep(frameTime - duration);
} catch (InterruptedException ie) {done=true;}
}
}
}
public void input()
{
// Entrada del jugador
int keyStates = getKeyStates();
if(estadoHero==0)
{
if (((keyStates & LEFT_PRESSED) != 0)&&(colisionBloque(1)==1)) {newx=posx-32; estadoHero=1; time=0; hero.setFrame(3);}
if (((keyStates & RIGHT_PRESSED) != 0)&&(colisionBloque(2)==1)) {newx=posx+32; estadoHero=2; time=0; hero.setFrame(12);}
if (((keyStates & UP_PRESSED) != 0)&&(colisionBloque(3)==1)) {newy=posy-32; estadoHero=3; time=0; hero.setFrame(3);}
if (((keyStates & DOWN_PRESSED) != 0)&&(colisionBloque(4)==1)) {newy=posy+32; estadoHero=4; time=0; hero.setFrame(12);}
}
if(estadoHero==1)
{
if(newx<posx){posx-=4;}else{if (((keyStates & LEFT_PRESSED) != 0)&&(colisionBloque(1)==1)) {newx=posx-32; estadoHero=1; time=0; hero.setFrame(3);}else{estadoHero=0; time=0; hero.setFrame(0);} }
}
if(estadoHero==2)
{
if(newx>posx){posx+=4;}else{if (((keyStates & RIGHT_PRESSED) != 0)&&(colisionBloque(2)==1)) {newx=posx+32; estadoHero=2; time=0; hero.setFrame(12);}else{estadoHero=0; time=0; hero.setFrame(0);}}
}
if(estadoHero==3)
{
if(newy<posy){posy-=4;}else{if (((keyStates & UP_PRESSED) != 0)&&(colisionBloque(3)==1)) {newy=posy-32; estadoHero=3; time=0; hero.setFrame(3);}else{estadoHero=0; time=0; hero.setFrame(0);}}
}
if(estadoHero==4)
{
if(newy>posy){posy+=4;}else{if (((keyStates & DOWN_PRESSED) != 0)&&(colisionBloque(4)==1)) {newy=posy+32; estadoHero=4; time=0; hero.setFrame(12);}else{estadoHero=0; time=0; hero.setFrame(0);}}
}
hero.setRefPixelPosition(posx+scrollX, posy+scrollY);
}
public void animarHero()
{
if(estadoHero==0)
{
time+=1;
if((framehero==0)&&(time>50)){framehero=1; time=0; hero.setFrame(1);}
if((framehero==1)&&(time>15)){framehero=2; time=0; hero.setFrame(2);}
if((framehero==2)&&(time>15)){framehero=0; time=0; hero.setFrame(0);}
}
if(estadoHero==1)
{
time+=1;
if((framehero==0)&&(time>2)){framehero=1; time=0; hero.setFrame(3);}
if((framehero==1)&&(time>2)){framehero=2; time=0; hero.setFrame(4);}
if((framehero==2)&&(time>2)){framehero=0; time=0; hero.setFrame(5);}
}
if(estadoHero==2)
{
time+=1;
if((framehero==0)&&(time>2)){framehero=1; time=0; hero.setFrame(12);}
if((framehero==1)&&(time>2)){framehero=2; time=0; hero.setFrame(13);}
if((framehero==2)&&(time>2)){framehero=0; time=0; hero.setFrame(14);}
}
if(estadoHero==3)
{
time+=1;
if((framehero==0)&&(time>2)){framehero=1; time=0; hero.setFrame(3);}
if((framehero==1)&&(time>2)){framehero=2; time=0; hero.setFrame(4);}
if((framehero==2)&&(time>2)){framehero=0; time=0; hero.setFrame(5);}
}
if(estadoHero==4)
{
time+=1;
if((framehero==0)&&(time>2)){framehero=1; time=0; hero.setFrame(12);}
if((framehero==1)&&(time>2)){framehero=2; time=0; hero.setFrame(13);}
if((framehero==2)&&(time>2)){framehero=0; time=0; hero.setFrame(14);}
}
}
public void colisionTile()
{
for(int s=0; s<250;s+=1)
{
if(tile[s]!=null)
{
if(tile[s].getFrame()==1)
{
if((tile[s].getX()==posx)&&(tile[s].getY()==posy))
{
tileX[s]=-32;
tileY[s]=-32;
tile[s].setRefPixelPosition(tileX[s], tileY[s]);
}
}
}
}
}
public void Scroll()
{
int sx,sy;
//Actualizar Scroll
if(posx>159){scrollX=-(posx-160);}
if(posy>191){scrollY=-(posy-192);}
//Actualizar Tiles
for(int s=0; s<250;s+=1)
{
if(tile[s]!=null)
{
tile[s].setRefPixelPosition(tileX[s]+scrollX, tileY[s]+scrollY);
}
}
}
private int colisionBloque(int estado)
{
int libre=1;
for(int s=0; s<250;s+=1)
{
if(tile[s]!=null)
{
if((tile[s].getFrame()==2)||(tile[s].getFrame()==3))
{
if(estado==1){if((tile[s].getX()==posx-32)&&(tile[s].getY()==posy)){libre=0;}}
if(estado==2){if((tile[s].getX()==posx+32)&&(tile[s].getY()==posy)){libre=0;}}
if(estado==3){if((tile[s].getX()==posx)&&(tile[s].getY()==posy-32)){libre=0;}}
if(estado==4){if((tile[s].getX()==posx)&&(tile[s].getY()==posy+32)){libre=0;}}
}
}
}
return libre;
}
private Sprite createHero()
{
Image imagen = null;
Sprite sprite = null;
try {
imagen = Image.createImage("/murphy.png");
} catch (IOException ioe) {System.out.println("Error al cargar murphy.png"); };
sprite = new Sprite(imagen,32,32);
sprite.defineReferencePixel(0, 0);
sprite.setVisible(true);
return sprite;
}
private Sprite createTile(int tile)
{
Image imagen = null;
Sprite sprite = null;
try {
imagen = Image.createImage("/tiles.png");
} catch (IOException ioe) {System.out.println("Error al cargar tiles.png"); };
sprite = new Sprite(imagen,32,32);
sprite.defineReferencePixel(0, 0);
sprite.setFrame(tile);
sprite.setVisible(true);
return sprite;
}
public void render(Graphics g) {
// borrar pantalla
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0,0,0);
g.fillRect(0, 0, getWidth(), getHeight());
//Tiles
for(int i=0; i<250;i+=1)
{
if(tile[i]!=null)
{
tile[i].paint(g);
}
}
//Sprites
hero.paint(g);
//Debug
g.setColor(255,255,255);
g.drawString("X: "+posx,0, 10,Graphics.BASELINE|Graphics.LEFT);
g.drawString("Y: "+posy,0, 20,Graphics.BASELINE|Graphics.LEFT);
g.drawString("W: "+getWidth(),0, 30,Graphics.BASELINE|Graphics.LEFT);
g.drawString("H: "+getHeight(),0, 40,Graphics.BASELINE|Graphics.LEFT);
g.drawString("SX: "+scrollX,0, 50,Graphics.BASELINE|Graphics.LEFT);
g.drawString("SY: "+scrollY,0, 60,Graphics.BASELINE|Graphics.LEFT);
// flip!

flushGraphics();
}
}

miguel
25 de Octubre del 2009
Pastea la traza de pila en el foro o bajate la API de lady4j... ejecutar tu codigo es un poco inviable sin la plataforma en cuestion y es necesario ver la traza de pila para analizarlo.