Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Avvio applicazione posticipato - Timer TimerTask

    Salve a tutti,

    come da titolo...
    In che modo posso avviare un applicazione in modo posticipato? Ovvero l'idea sarebbe dare all'utente la possibilità di scendere l'ora di avvio dell'applicazione.

    Ho visto la classe java.util.Timer "combinata" con TimerTask. Però ... cioè dovrei inserire in pratica tutto lo svolgimento dell'intera applicazione all'interno del metodo run di TimerTask ? Giusto?

    Alternative ? Altri metodi ?

    Ho visto l'ultilizzo di javxx.swing.Timer con evento , ma praticamente l'evento si verifica più volte ad ogni "delay" .... Io ho bisogno invece di un singolo avvio.

    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Avvio applicazione posticipato - Timer TimerTask

    Originariamente inviato da JavaFurbix
    In che modo posso avviare un applicazione in modo posticipato? Ovvero l'idea sarebbe dare all'utente la possibilità di scendere l'ora di avvio dell'applicazione.
    Ma intendi dire schedulare ad un certo tempo proprio l'avvio della applicazione cioè far partire la JVM?? Perché nel sistema operativo c'è già sicuramente il modo per "schedulare" delle operazioni in generale. Su Windows vedi le "Operazioni pianificate".

    Originariamente inviato da JavaFurbix
    Ho visto la classe java.util.Timer "combinata" con TimerTask. Però ... cioè dovrei inserire in pratica tutto lo svolgimento dell'intera applicazione all'interno del metodo run di TimerTask ? Giusto?
    Se invece intendi che la applicazione è sempre in esecuzione ma esegue "qualcosa" solo ad intervalli di tempo o ad un preciso orario, allora java.util.Timer è appropriato.

    Originariamente inviato da JavaFurbix
    Ho visto l'ultilizzo di javxx.swing.Timer con evento , ma praticamente l'evento si verifica più volte ad ogni "delay"
    javax.swing.Timer è più orientato ad operazioni che devono agire in qualche modo sulla interfaccia utente (visto che è un evento dispacciato nel contesto del EDT). Comunque, per la cronaca, a questo Timer puoi anche "dirgli" setRepeats(false)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    andbin, complimenti sempre a te !

    Allora, ti sono sincero.. Mi interessano entrambi i casi :

    Sia avviare l'applicazione e lasciare in uno stato di "sospensione" fin quando non si verifica la condizione che l'orario del sistema è uguale all'ora inserita dall'utente..

    Sia avviare l'applicazione in data/ora specificata dall'utente. Ma da quanto mi fai capire, questo è possibile farlo solo da OS.

    Giusto?

  4. #4
    In più volevo chiederti, se operando con TimerTask, dopo aver creato tutta la struttura del programma, c'è bisogno di creare una nuova classe da estendere con TimerTask e spostare tutta la logica del programma nel metodo run di TimerTask, giusto? E' l'unico modo??

    Oppure sto facendo confusione ?!?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da JavaFurbix
    Sia avviare l'applicazione e lasciare in uno stato di "sospensione" fin quando non si verifica la condizione che l'orario del sistema è uguale all'ora inserita dall'utente..
    Come ho detto, qui basta usare java.util.Timer. Questo timer è abbastanza flessibile per gestire timing singoli, ripetitivi, ad intervalli di tot tempo o a (o da) un Date (un certo istante) ben preciso.

    Originariamente inviato da JavaFurbix
    Sia avviare l'applicazione in data/ora specificata dall'utente. Ma da quanto mi fai capire, questo è possibile farlo solo da OS.
    Qui non centra più Java ma cosa offre il S.O. E ovviamente cambia da un S.O. all'altro. Su Windows ci sono le "Operazioni pianificate", su Linux c'è il noto "crond" un demone di sistema che può essere configurato per schedulare la esecuzione di comandi.

    Originariamente inviato da JavaFurbix
    In più volevo chiederti, se operando con TimerTask, dopo aver creato tutta la struttura del programma, c'è bisogno di creare una nuova classe da estendere con TimerTask e spostare tutta la logica del programma nel metodo run di TimerTask, giusto? E' l'unico modo??
    Devi chiaramente estendere TimerTask per definire un "tuo" task e fare l'override del suo run().
    Cosa fa il tuo run() ... spetta a te. Ma con una considerazione importante da fare: il Timer usa un suo "thread" di background che si crea all'inizio per gestire le temporizzazioni. E il run() dei task viene eseguito nel contesto di questo thread.
    Pertanto non dovresti tenere "impegnato" questo thread per troppo tempo, perché è quello del Timer.
    Nel run() dovresti fare qualcosa di relativamente "breve": avviare un nuovo thread per eseguire un certo lavoro o invocare qualcosa che faccia eseguire qualcos'altro in modo asincrono. Insomma, non tenere impegnato il thread del Timer.

    Dal punto di vista del "design", nel run() non ci devi per forza mettere fisicamente tutto il codice del tuo lavoro. Puoi benissimo (e sarebbe meglio) separare le cose e fare in modo che il run() si limiti ad istanziare e/o invocare quel poco che serve ed è necessario per fare eseguire qualcosa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Grazie mille, sei stato chiarissimo.

    Sono ancora dubbioso sul design . Cioè mi è un attimo difficile pensare ora..
    Domani butto giù qualche riga per cercare di chiarirmi e rendere mio il concetto e nel caso sono ancora confuso, posto quì per confrontarmi con te =).

    Nel frattempo ti ringrazio tantissimo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.