public static final long Tempo = 120000;
public static void main(String[] args)
{
System.out.println("A iniciar....");
Timer timer = null;
if(timer == null){
timer = new Timer();
TimerTask tarefa = new TimerTask(){
public void run(){
try{
System.out.println("Continua a ler ficheiro...");
lerficheiro(); //corre a classe Open de leitura de ficheiros
}catch (Exception e){
e.printStackTrace();
}
try{
System.out.println("Continua a calcular DAP...");
//PDos x = new PDos(); //corre a classe PDos de cálculo de DAP máximo
PDos.dosemetria();
}catch (Exception e){
e.printStackTrace();
}
try{
System.out.println("Continua a eliminar BD...");
//Delete del = new Delete(); //corre a classe PDos de cálculo de DAP máximo
Delete.apaga();
}catch (Exception e){
e.printStackTrace();
}
}
};
timer.scheduleAtFixedRate(tarefa, Tempo, Tempo); //o código pós main, é o que permite a repetição da execução do código a cada x tempo anteriormente definido (neste caso = 2 minutos)
}
}
}
o que gostaria de saber é se posso correr o lerficheiro e a class PDos de 2 em 2 minutos que é o tempo que está definido, mas só correr a delete de 10 em 10.
se eu entendi direito o que você quer, para executar de tempo em tempo, você pode colocar a chamada do método em um loop infinito, dando um Thread.sleep(valor); no final do loop, caso você queira que só execute nos primeiros 10 minutos por exemplo, você pode pegar o System.currenttime antes de iniciar o loop e, ao inicia-lo você pode pegar o horário atual e comparar com o pego da mesma forma (com o currenttime) anteriormente, e caso tenha passado 10 minutos da um break.
alguma coisa ± assim:
[code]long inicio = System.currentTimeInMilis();//acho que é esse o nome exato do método, confirma ai
while(true){
long horarioAtual = System.currentTimeInMilis();
if (horarioAtual - inicio >= xxx){ //calcula ai você quando ta 10 minutos
break;
}
fazAlgumaCoisa();
try{ Thread.sleep(1000);//tempo de espera entre execuções do metodo
}catch(InterruptedException ie){}
}[/code]
alguma coisa ± assim, ou usar do while (horarioAtual - inicio < xxx);, ou alguma coisa assim… avontade… ai cada uma dessas tarefas teria uma thread a parte, para o tempo de execução de uma tarefa não influir na outra…
À uns tempos (anos já) tive que fazer assim uma coisa e utilizei penso que o Thread.sleep, e punha lá o tempo e ele parava esse tempo ou seja, num ciclo qualquer pões o método e o Thread.sleep(ou Pause já não me lembro bem) e ele para os tais 2 minutos e depois retorna. O problema disso é que se eu quisesse fazer mais alguma coisa no programa em paralelo com o Thread.sleepnão podia ou seja, o programa ficava mesmo bloqueado e essa solução não era lá muito útil.
Vou esperar que apareça alguém com mais experiência para ver como se faz sem ter que bloquear o programa.
Abraço, boa sorte com esse problema.
EDIT: Houve alguém que se antecipou a mim (maior_abandonado). Deixo então a questão a ele: imaginemos que eu tenho um programa que tem várias funcionalidades e menus e tal, e que eu quero que ele execute determinado método de X em X tempo, no entanto eu quero, no intervalo dessas execuções, chamar outros métodos fazer outras acções. Dessa forma é possível? É que eu fiz mais ou menos assim uma altura e não dava.