PDA

View Full Version : [Java] Schedule


max246
08-06-2007, 14:34
class MyTask extends TimerTask {
private ControlloFile controllo;
public MyTask (ControlloFile c) {
controllo = c;
}
public void run() {
System.out.println( "Running the task" );
Timer timer = new Timer();
Timer timer2 = new Timer();

timer.schedule(controllo , 30000);
timer2.schedule(new MyTask(controllo) , 30000);
}
}

Questa è la mia classe che dovrei sempre richiamare ogni 30 secondi che poi richiama anche la classe ControlloFile.
Nel controllo fai faccio un check di determinati file... e questo devo farlo a intervalli...
Usando questo metodo, dopo la seconda volta che faccio il timer mi dice Exception in thread "Timer-1" java.lang.StackOverflowError

Come posso ovviare o trovare un'altra soluzione?

ally
08-06-2007, 14:48
...potresti usare un ticker...


import sun.misc.Timeable;
import sun.misc.Timer;

public class Ticker implements Timeable{

public static void main(String[] args) {

new Ticker();
}

public Ticker(){

Timer ticker = new Timer(this, 3000);
ticker.cont();

}
public void tick(Timer arg0) {
System.out.println("che devo fare?");

}
}


...ciao...

^TiGeRShArK^
08-06-2007, 14:48
devi mettere il ciclo all'interno del thread..
non puoi riutilizzare un Thread se non sbaglio :p
Quindi hai due scelte..
crearti ad ogni ciclo un altro oggetto Timer o fare il ciclo direttametne all'interno del timer che mi pare la soluzione + pulita :p

^TiGeRShArK^
08-06-2007, 14:49
...potresti usare un ticker...

...ciao...

e infatti il ticker gestisce il ciclo internamente ;)

max246
21-06-2007, 09:54
Dopo aver fatto funziona tutto ritorno con un nuovo problema :)

Io tramite la mia GUI, setto il tempo della esecuzione.... pero quando ho creato questa classe timer, non posso piu cambiare il tempo, come posso fare?

class Ticker implements Timeable{
private static ControlloFile controllo;
private static Configurazione conf;
private static ContenitoreDati CD;
private static TrayIcon traybar;
public static void main(String[] args) {

new Ticker(controllo, conf, CD,traybar);
}

public Ticker(ControlloFile c, Configurazione co,ContenitoreDati CD,TrayIcon tyb){
controllo = c;
conf = co;
this.CD = CD;
traybar = tyb;
System.out.println(conf.GetIntervallo());
System.out.println(conf.GetIntervallo()*60000);
Timer ticker = new Timer(this,conf.GetIntervallo()*60000 );
ticker.cont();

}
public void tick(Timer arg0) {

traybar.displayMessage(
"Scansione in corso...",
"Avviata",
TrayIcon.MessageType.INFO );
controllo.CercaFile();
FileOutputStream f = null;
try {
f = new FileOutputStream("mio.dat");
} catch (FileNotFoundException ex) {
ex.printStackTrace();

}
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(f);
} catch (IOException ex) {
ex.printStackTrace();
}
try {
out.writeObject(CD);
} catch (IOException ex) {
ex.printStackTrace();
}
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
try {
f.close();
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println("passo");
traybar.displayMessage(
"Scansione in corso...",
"Completata",
TrayIcon.MessageType.INFO
);
System.out.println(conf.GetIntervallo());


}
}

max246
21-06-2007, 12:28
up

ianaz
21-06-2007, 15:12
fiu fiu fiuuuu

max246
21-06-2007, 16:28
NESSUNO SA AIUTARMI? :(