Eventos das teclas

Ola pessoal,
não estou conseguindo fazer com que os eventos das teclas funcionem. podem me ajudar

import java.io.IOException;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;



public class RPGCanvas extends GameCanvas implements Runnable{
	Thread t;
	Graphics g = getGraphics();
	Sprite personagem,personagemCima,personagemBaixo,personagemDireita,personagemEsquerda,dragao;
	TiledLayer fundo;
	int posX = 80;
	int posY = 100;
	LayerManager lm;
	public RPGCanvas() {
		super(true);
		try {
			dragao = new Sprite(Image.createImage("/dragao.PNG"),32,39);
			personagem = new Sprite(Image.createImage("/personagem.PNG"),24,28);
			personagemCima = new Sprite(Image.createImage("/moveCima.PNG"),24,28);
			personagemBaixo = new Sprite(Image.createImage("/moveBaixo.PNG"),24,28);
			personagemDireita = new Sprite(Image.createImage("/moveDireita.PNG"),24,28);
			personagemEsquerda = new Sprite(Image.createImage("/moveEsquerda.PNG"),24,28);
		}catch (IOException e){
			System.out.println("Imagem nao carregada");
		}
		t = new Thread(this);
		t.start();
	}
	
	private void montarMapa(){
		int colunasMatriz = 11;
		int linhasMatriz = 11;
		int larguraFigura = 16;
		int alturaFigura = 16;
		int cenario[][] = {
				{1,1,1,1,1,1,1,1,1,1,1},
				{1,2,2,2,2,2,2,2,2,2,1},
				{1,2,2,2,2,2,2,2,2,2,1},
				{1,2,2,2,2,2,2,2,2,2,1},
				{1,2,2,2,2,2,2,2,2,2,1},
				{1,2,2,2,2,2,2,2,2,2,1},
				{1,2,2,2,2,2,2,2,2,2,1},
				{1,2,2,2,2,2,2,2,2,2,1},
				{1,2,2,2,2,2,2,2,2,2,1},
				{1,2,2,2,2,2,2,2,2,2,1},
				{1,1,1,1,1,1,1,1,1,1,1}};
		try{
			Image imagem = Image.createImage("/mapa.png");
			fundo = new TiledLayer(colunasMatriz,linhasMatriz,imagem,larguraFigura,alturaFigura);
			for(int i=0; i < linhasMatriz; i++){     
				for(int j=0; j < colunasMatriz; j++){     
					fundo.setCell(j, i, cenario[i][j]);     
				}     
			}
		}catch(IOException e){
			System.out.println("Imagem nao encontrada");

		}


	}

	private void colidir(){
		if(personagem.collidesWith(dragao, true)){
			System.out.println("colidiu");
			posY-=5;
		}
	}

	private void eventosTeclado() { 
		int key = getKeyStates();
		if(key==0){
			personagem.setFrame(1);

		}
		if ((key & LEFT_PRESSED) != 0){
			personagem = personagemEsquerda;
			posX-=5;
			if(personagem.getFrame()==0){
				personagem.nextFrame();
			}
			personagem.nextFrame();

			if(posX==10){
				posX+=5;
			}

		}
		else if((key & RIGHT_PRESSED) != 0){
			personagem = personagemDireita;
			posX+=5;
			if(personagem.getFrame()==0){
				personagem.nextFrame();
			}
			personagem.nextFrame();
			if(posX==140){
				posX-=5;
			}

		}
		else if((key & UP_PRESSED) != 0){           
			personagem = personagemCima;
			posY-=5;
			if(personagem.getFrame()==0){
				personagem.nextFrame();
			}
			personagem.nextFrame();
			if(posY==10){
				posY+=5;
			}
		}

		else if((key & DOWN_PRESSED) != 0){           
			personagem = personagemBaixo;
			posY+=5;
			if(personagem.getFrame()==0){
				personagem.nextFrame();
			}
			personagem.nextFrame();
			if(posY==135){
				posY-=5;
			}
		}
	}

	public void run() {
		montarMapa();
		lm = new LayerManager();
		lm.append(personagem);
		lm.append(fundo);
		while(true){
			eventosTeclado();
			try {
				lm.paint(g, 0, 0);
				Thread.sleep(200);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}

	}

}


Os eventos do teclado estão funcionando, coloquei um System.out.println() quando aperto as teclas e deu certo.
também modifiquei o método run, e agora sim os eventos estão funcionando, fazendo com que o personagem mude.
o problema que esta acontecendo é que o personagem fica apenas no canto superior direito, por mais que eu coloque pr aesquerda ou direita, o que acontece apenas é mudar o sprite de movimento.
alguem pode me ajudar como fazer, e também como carregar o personagem em outra posição da tela?

private void desenhaTela(){
         lm = new LayerManager();  
         lm.append(personagem);  
         lm.append(fundo);  
}

public void run() {  
         montarMapa();  
         while(true){  
            eventosTeclado();  
             try {
                 desenhaTela();
                 lm.paint(g, 0, 0);  
                 Thread.sleep(200);  
             } catch (InterruptedException e) {  
                 e.printStackTrace();  
             }  
   
         }  
   
     }  
   
 }