1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Timer em Java p/ Mobile

Discussão em 'Programação' iniciada por andrepadez, 14 de Maio de 2008. (Respostas: 7; Visualizações: 1056)

  1. andrepadez

    andrepadez Power Member

    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:

    Código:
     
    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
     
  2. Se disseres qual é a linha em que isso acontece é mais fácil. De qualquer forma consulta aqui a documentação da classe Timer.
     
  3. andrepadez

    andrepadez Power Member

    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...
     
    Última edição pelo moderador: 17 de Maio de 2008
  4. Mavors

    Mavors Power Member

    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:

    Código:
    
    class MyTask extends TimerTask {
    
    public void run(){
    
    // Aqui metes o que queres que ele execute.
    
      }
    }
    
    E assim passavas:

    Código:
    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
     
    Última edição: 14 de Maio de 2008
  5. andrepadez

    andrepadez Power Member

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

    Quaker Power Member

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

    andrepadez Power Member

    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.
     
  8. andrepadez

    andrepadez Power Member

Partilhar esta Página