Erro de compilação wtk

4 respostas
F

[color=“black”]Olá, pessoal. Estou iniciando no j2ME, e gostaria de tirar uma dúvida. Naquela apostila para iniciantes, disponível aqui no portal java, o autor faz um programinha em que um quadrado move-se na tela do celular.

Conforme está na apostila:

Agora que aprendemos a teoria, vamos ver como ficaria uma aplicação com
renderização dependente de tempo.
Primeiro cria-se uma classe que herda de Canvas para desenharmos o que
queremos na tela.

[color=black]import javax.microedition.lcdui.*;

class MeuCanvas extends Canvas

{

// posição do objeto que se movimentará na tela

private int x=0;

private int y=0;

int largura;

int altura;

public MeuCanvas()

{

this.largura=this.getWidth();

this.altura=this.getHeight();

}

public void paint(Graphics g)

{

// pinta o fundo da tela de branco e o objeto de preto

g.setColor(255,255,255);

g.fillRect(0,0,this.largura,this.altura);

g.setColor(0,0,0);

g.drawRect(x,y,15,15);

}

// vamos criar métodos para mudarmos a posição do quadrado na tela

public void setPositionX(int x)

{this.x=x;}

public void setPositionY(int y)

{this.y=y;}

}[/color]

[color=“blue”]Precisamos de duas tarefas para serem agendadas, uma para a movimentação e
outra para pintar na tela.
Vamos lá…[/color]

import java.util.TimerTask;

class TarefaMovimento extends TimerTask

{

// como precisamos acessar o método setPositionX() e setPositionY() da classe

MeuCanvas,

//temos que passá-la como parâmetro no construtor

MeuCanvas canvas;

// precisamos da altura e largura da tela para fazermos o algoritmo do movimento

int largura;

int altura;

//precisamos do ponto de movimento e variáveis pra troca de sentido do movimento

int x=1;

int y=1;

int xs=1;

int ys=1;

public TarefaMovimento(MeuCanvas canv)

{

this.canvas=canv;

this.largura=this.canvas.largura;

this.altura=this.canvas.altura;

}

public void run()

{

//troca o sentido do movimento

if(x<=0 || x>=this.largura-15)// - 15 pois esa é a largura do quadrado

{xs*=-1;}

if(y<=0 || y>=this.altura-15)// - 15 pois esa é a largura do quadrado

{ys*=-1;}

//incrementa ou decrementa as posições

x+=(1<em>xs);

y+=(1</em>ys);

// muda a posição na classe MeuCanvas

this.canvas.setPositionX(x);

this.canvas.setPositionY(y);

}

}

[color=“blue”]Agora vamos fazer a tarefa para pintar o objeto na tela.[/color]

import java.util.TimerTask;

class TarefaRenderizacao extends TimerTask

{

MeuCanvas canvas;

public TarefaRenderizacao(MeuCanvas canv)

{

this.canvas=canv;

}

public void run()

{

//precisamos apenas pintar o objeto na posição que a outra

//tarefa o deixou no momento

this.canvas.repaint();

}

}

[color=“blue”]Já temos as duas tarefas, agora precisamos agendá-las.
Isso iremos fazer na classe principal do Aplicativo, aquela que herda de MIDlet.
Vamos lá…[/color]

[b]import javax.microedition.midlet.<em>;

import javax.microedition.lcdui.</em>;

import java.util.*;

public class DependenteTempo extends MIDlet implements CommandListener

{

Command sair;

Display tela;

MeuCanvas canvas;

TarefaMovimento tm;

TarefaRenderizacao tr;

Timer timerMov;

Timer timerRender;

public DependenteTempo()

{

this.sair=new Command(Sair,Command.EXIT,0);

this.canvas=new MeuCanvas();

this.canvas.addCommand(this.sair);

this.canvas.setCommandListener(this);

// criamos as tarefas de movimento e renderização

this.tm=new TarefaMovimento(this.canvas);

this.tr=new TarefaRenderizacao(this.canvas);

// cria um Timer(Agendador) para cada tarefa

this.timerMov=new Timer();

this.timerRender=new Timer();

}

public void startApp()
{

this.tela=Display.getDisplay(this);

this.tela.setCurrent(this.canvas);

// agenda cada tarefa com seu tempo de repetição determinado

// nesse caso deixei a movimentação mais freqüente que a renderização

this.timerMov.scheduleAtFixedRate(<a href="http://this.tm">this.tm</a>,0,10);

this.timerRender.schedule(<a href="http://this.tr">this.tr</a>,0,100);

}

public void pauseApp()

{

}

public void destroyApp(boolean b)

{

}

public void commandAction(Command c,Displayable d)

{

if(c==this.sair)

{

this.destroyApp(true);

this.notifyDestroyed();

}

}

}[/b]

[color=“blue”]Pronto, agendamos as tarefas no inicio da aplicação (startApp()) e temos um
quadrado se movimentando por toda a tela.
Para rodar isso em seu WTK, basta você criar um novo Projeto com o nome de:
DependenteTempo e adicionar todas as classes acima no diretório /src da sua aplicação.
Não se esqueça que o nome do arquivo de cada classe deve ser o nome da
classe e a extensão de codigos fonte java (.java).[/color]

PESSOAL, EU FIZ TUDO o que ele disse acima. Só que está aparecendo a seguinte mensagem de erro no compilador:

Project DependenteTempo loaded

Running with storage root DefaultColorPhone

Running with locale: Portuguese_Brazil.1252

Unable to create MIDlet DependenteTempo

java.lang.ClassNotFoundException: DependenteTempo

at com.sun.midp.midlet.MIDletState.createMIDlet(+29)

at com.sun.midp.midlet.Selector.run(+22)

Unable to create MIDlet DependenteTempo

java.lang.ClassNotFoundException: DependenteTempo

at com.sun.midp.midlet.MIDletState.createMIDlet(+29)

at com.sun.midp.midlet.Selector.run(+22)

Alguém tem alguma idéia do que pode estar errado? Se puderem responder, ficarei muito grato, rapazeada. obrigado.[color="#444444"][/color]

4 Respostas

M

Você está criando as classes de forma certa? Eu executei os códigos que tu postou e funcionou normal!

F

hum… acho que tô errando na criação das classes. tem como dar uma força?? obrigado.

M

Eu só abri o wtk e criei um novo projeto onde o “midlet Class name” eu coloquei com o nome DependenteTempo. Ai pra cada classe que tu mostrou ali eu criei arquivos .java e gravei dentro do diretório src do projeto. Depois compilei (build) e executei sem erros.

C

Olá,
Eu sou o responsável por esse código aí.
Você criou os arquivos com o nome igual? Letras maiúsculas e minusculas tudo igualzinho?

Criado 1 de março de 2007
Ultima resposta 6 de mar. de 2007
Respostas 4
Participantes 3