View Full Version : Timer em Java p/ Mobile


andrepadez
14-05-2008, 21:16
Boas,
estou a começar a programar em Java (para mobile), queria utilizar a classe Timer como usei em C#.
Eis o código da classe que estou a criar:


public Chrono(int min, int sec){
this.limitMinutes = min;
this.limitSeconds = sec;
countdown = new java.util.Timer();
countdown.schedule(Chrono_Tick(), 1000);
}

private void chrono_Tick(){
if (!paused){
if (limitSeconds == 0){
limitSeconds = 60;
limitMinutes--;
}
limitSeconds--;

if (limitSeconds == 0 && limitMinutes == 0)
countdown.wait();
}


Ao compilar dá-me um erro que diz:

"D:\Documents and Settings\Randomly\My Documents\NetBeansProjects\MobileApplication1\src\ Chrono.java:20: 'void' type not allowed here"

Alguem me sabe explicar porquê? e como resolver???

Thx

Mr. Brightside
14-05-2008, 21:43
Se disseres qual é a linha em que isso acontece é mais fácil. De qualquer forma consulta aqui (http://java.sun.com/j2se/1.5.0/docs/api/java/util/Timer.html) a documentação da classe Timer.

andrepadez
14-05-2008, 21:46
tem a ver com a função private void chrono_Tick().

diz que não posso usar o tipo void aqui

Vou ver a documentação que postaste, thx

Ok, estive a ler o que me mandaste, mas não falam de como criar ou invocar o método que vai ser chamado on_Tick.

Se me puderem ajudar...

Mavors
14-05-2008, 22:22
Nunca utilizei essa Timer, mas pelo que percebi lendo a API, o método schedule tem várias assinaturas mas o primeiro é sempre TimerTask task.

por exemplo, e seguindo a tua lógica: countdown.schedule(TimerTask task, Date date);
contudo o primeiro parametro que passas é simplesmente void, não correspondendo ao parametro de entrada.

Fui então ler a API do TimerTask.


E penso que resolves o teu problema criando uma classe que extenda o TimerTask, tipo:



class MyTask extends TimerTask {

public void run(){

// Aqui metes o que queres que ele execute.

}
}


E assim passavas:


countdown = new java.util.Timer();
countdown.schedule(new MyTask(), 1000);


Podes ler mais sobre esta API aqui: http://java.sun.com/j2se/1.3/docs/api/java/util/TimerTask.html

andrepadez
15-05-2008, 13:55
Antes de mais obrigado ao Mavers e ao MrBrightside.

Ok, experimentei assim e compilou. Não consigo é perceber como posso fazer o que quero, como tenho em C# e corre-me perfeitamente:

1 - classe Chrono que recebe no construtor como args ints minutos e segundos (limite)
- tem como instâncias limitMinutes e limitSeconds (ints) e countdown (Timer)~
- o método que contem as instruções executadas ao Delay (de segundo a segundo, baixar os segundos, e se segundos chegam a zero segundos = 60 e minutos--;
- Dentro dessa classe tenho os métodos para Start e Stop do Timer
- ToString()

2 - no programa principal declaro uma instância de Chrono com (2m30s de limite).
- crio um timer tb para todos os segundos fazer "label1.text= chrono1.toString();"

Não estou a ver como consigo fazer algo do género em Java, deve ser possível de certeza.
Já percebi mais ou menos os mecanismos do Timer e TimerTask. Penso que é mais uma questão de organização do que outra coisa.
Alguem me pode ajudar???

Quaker
15-05-2008, 18:06
Eu acho que conseguirias fazer o mesmo em java.... provavelmente escapou-te um pormenor.

Mas não compares o C# com java... Podem parecer iguais a primeira vista mas não o são...
Vou falar no C# pois é nesta linguagem que tenho programado ultimamente.
o C# permite:
utilizar delegates que são muito mais flexiveis que os handlers do java.
criar classes, métodos genéricos
criar métodos anónimos
e isto é o que eu me recordo agora...
Ambas têm as suas vantagens e desvantagens....

andrepadez
15-05-2008, 19:38
boas, eu sei que são muito diferentes.
ainda há muito que me falta para dominar c# mas quero aprender java ao mesmo tempo. E isto não é bem uma questão de diferença de linguagens mas mais de como a própria classe está definida.

andrepadez
16-05-2008, 11:00
Anyone?