|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2005
Messaggi: 340
|
[Java] Schedule
Codice:
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); } } 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? |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Jan 2003
Città:
Messaggi: 4421
|
...potresti usare un ticker...
Codice:
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?"); } } |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
devi mettere il ciclo all'interno del thread..
non puoi riutilizzare un Thread se non sbaglio ![]() 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 ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
e infatti il ticker gestisce il ciclo internamente
![]()
__________________
![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2005
Messaggi: 340
|
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? Codice:
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()); } } |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2005
Messaggi: 340
|
up
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: May 2005
Messaggi: 340
|
NESSUNO SA AIUTARMI?
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:13.