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...
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???
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.