View Full Version : [Java] Schedule
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?
...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 ;)
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());
}
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.