Problema ao compilar código MIDlet . AJUDA

boas eu estou tentanto compilar um codigo de uma aplicacao midp mas da me sempre este erro:


Unable to create MIDlet snake.SnakeMain
java.lang.NullPointerException

o código é o seguinte:

7MIDLET MAIN/

[i]
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.midlet.MIDlet;

public class SnakeMain extends MIDlet
{
private Display display;
private SnakeCanvas snakeCanvas;

public SnakeMain ()
{
    display = Display.getDisplay(this);
    snakeCanvas = new SnakeCanvas ();
}

protected void startApp ()
{
        display.setCurrent(snakeCanvas);   
} 

protected void pauseApp ()
{
    
}

protected void destroyApp (boolean b)
{
    destroyApp(false);
  	notifyDestroyed();
}

}
[/i]

/GAMECANVAS/

[i]
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;

public class SnakeCanvas extends GameCanvas implements Runnable
{
public int state;

public static final int STATE_RUNNING = 0;
public static final int STATE_STOP = 1;

public static final int MILLIS_PER_TICK = 1000 / 10;

private Snake snake;

private final static int sleepTime = 50;

private int loopCounter;
private boolean paused;

Thread t;

public SnakeCanvas ()
{
    super(true);
    initializeGame ();
}

void initializeGame ()
{
    
    snake = new Snake (5, 5, 4, 1, 0);
    paused = false;
loopCounter=0;
    
    t = new Thread(this); 
    t.start();
}

public void run ()
{        
    Graphics g = getGraphics();

    while (true)
    {
        processKeys ();

        if (!paused)
        {
            snake.move ();
        }

        repaint();
        
        try
        {
            Thread.currentThread().sleep(30);
        }
        catch(Exception e) 
        {
            // fazer nada
        }
    }
}

private void processKeys ()
{
    int keyStates = getKeyStates();
    
    if((keyStates & UP_PRESSED) != 0)
        snake.setDirection (0, -1);
    
    if((keyStates & DOWN_PRESSED) != 0)
        snake.setDirection (0, 1);
    
    if((keyStates & RIGHT_PRESSED) != 0)
        snake.setDirection (1, 0);
    
    if((keyStates & LEFT_PRESSED) != 0)
        snake.setDirection (-1, 0);
        
}

public void paint (Graphics g)
{
    if (!paused)
    {
        snake.drawSnake (g);
    }
}

}
[/i]

tenho estado a experimentar diferentes maneiras de fazer com que isto funcione mas nao consigo. tem qq coisa a ver com a maneira como as duas classes se ligam.
Nao sei como hei de por o Thread a funcionar nem o startApp ()…

Será que me podem ajudar?

olha só, nao tenho certeza mas mas acho q pode ser o seguinte: ta dizendo q nao conseguiu compilar a classe snake.SnakeMain, ou seja, existe um pacote chamado snake ai no meio do caminho, mas vc nao disse à classe q ela pertence ao pacote, coloque no inicio dos arquivos:

pra usar a thread dentro de startApp faz assim:

protected void startApp()
{
	display.setCurrent(snakeCanvas);

	// isso é só um exemplo, se quizer pode
	// manter a referencia pra thread, inicializa
	// no construtor e dispara aqui

	new Thread(snakeCanvas).start();
}

Desde ja obrigado pela brevidade da resposta.

[quote]
olha só, nao tenho certeza mas mas acho q pode ser o seguinte: ta dizendo q nao conseguiu compilar a classe snake.SnakeMain, ou seja, existe um pacote chamado snake ai no meio do caminho, mas vc nao disse à classe q ela pertence ao pacote, coloque no inicio dos arquivos:[/quote]

Quanto a isso acho que nao ha problema pq eu so me esqueci de copiar essa linha do codigo para aqui. ‘:)’

O que eu descobri atraves de experimentações foi que quando punha a linha:

snakeCanvas = new SnakeCanvas ();

dentro de um try aquilo dava uma excepcao, portanto julgo que o problema deve residir ai… ou na forma como dps se passa para o metodo initializeGame () da classe SnakeCanvas essa classe. nao faco ideia… é muito estranho!

Ja experimentei por a inicializacao do objecto snakeCanvas e do Thread de diferentes maneiras, de acordo com alguns exemplos que estao na net, mas nenhuma funciona com este codigo… ha qq coisa que me esta a escapar.

Isso dos threads e um bocado complicado… nao sei se o hei de iniciar na classe SnakeMain ou na SnakeCanvas e de que forma isso dps influencia o metodo run() da classe SnakeCanvas.

Estou um bocado desorientado! :?:

obrigado pela atençao.