PDA

Visualizza la versione completa : [JAVA] Generare evento


ale500
10-08-2005, 23:27
salve a tutti,
nel programma che dovrei fare ho 2 classi: chiamiamole Gestore A e GestoreB.

Il GestoreB ogni tanto dovrebbe generare degli eventi (questo almeno in visual basic si chiamavano così) ovvero ad esempio ogni volta che sono le 10.00 della mattina dovrebbe generare questa specie di evento. Il GestoreA se ne dovrebbe accorgere...

da quello che so io dovrebbe essere una cosa del genere:

Il GestoreA dovrebbe essere una specie di Listener e dovrebbe stare in ascolto sul GestoreB, ogni volta che sono le 10.00 il GestoreB se ne accorge e se ne dovrebbe accorgere anche il GestoreA (visto che è in ascolto sul GestoreB)

ora questa è la teoria...per la pratica lascio a voi!

Grazie. :fagiano:

floyd
11-08-2005, 09:17
uno dei gestori potrebbe essere un thread che resta in attesa un giorno e quando si attiva genera un qualcosa
una cosa che devi fare è sincronizzare il thread in modo che esegua alle 10
non e' difficile

ale500
11-08-2005, 11:38
il problema non è quello...

adesso ti spiego un po meglio...

il GestoreB in realtà non si deve attivare soltanto alle 10.00 di ogni giorni ma metti che si deve attivare per una serie di date ed ore che (per esempio e per comodità) sta in una tabella di un DB...

ammesso che mi sono già ottenuto l'elenco delle date ed ore in cui mi devo attivare come faccio a dire al GestoreB "guarda è il giorno XX.XX.XXXX e sono le ore YY:YY quindi ti devi accorgere" e nel frattempo il GestoreA che è in ascolto sul GestoreB si accorge ad allora ad esempio manda un MessageBox...

non so se ora mi sono spiegato meglio...

sarebbe utile ad esempio anche materiale a riguardo, esempi, tutorial, etc

grazie dell'aiuto :stordita:

floyd
11-08-2005, 12:30
fai un thread che "dorme" 1 minuto e controlla se deve fare qualcosa - versione facile

sono le 10:10 e sai che alle 10:16 devi scatenare qualcosa, fai dormire il thread 6 minuti, poi fai le azioni
dopo sai che devi scatenare altre robe alle 12:20, fai dormire per 2 ore e 4 minuti e fai quello che devi - versione difficile in questo caso devi considerare che se la prima esecuzione ci mette 1 secondo, non puoi far dormire per 2h4m ma 2h3m59s

ale500
11-08-2005, 19:30
perfetto....

come funzionamento ci sono...

ora..

hai degli esempi??? codice??? tutorial??? etc...

grazie... :zizi:

floyd
11-08-2005, 20:30
Vector<Calendar> allarmi; // il vettore di date
public void run() {
for (int i=0; i<allarmi.size(); i++) {
Calendar prossimo = allarmi.elementAt(i);
try {
// metto in attesa
long adesso = new Date().getTime();
sleep(prossimo.getTimeInMillis() - adesso);
VAI();
// sposto l'allarme a domani
prossimo.add(Calendar.DAY_OF_YEAR, 1);
}
catch (InterruptedException iex) {
}
// controllo se sono arrivato alla fine
if (i == allarmi.size()-1)
i = 0;
}
}
dovrebbe funzionare :fighet:

ale500
12-08-2005, 13:29
una cosa solo...

non avevo mai visto questo...


Vector<Calendar> allarmi;


praticamente serve a fare un Vector contenente soltanto elementi della classe Calendar...giusto???

quali sono i vantaggi dal non mettere Calendar???

grazie. :confused:

anx721
12-08-2005, 14:39
I vantaggi stanno nel fatto che non sei piu obbligato a fare il cast sui valori prelevati dal Vector perche questi saranno visti automaticamente come Calendar; inoltre a tempo di compilazione il compilatore può verificare se nel Vector aggiungi un Calendar o meno, generando un errore in caso contrario, mentre se usi un Vector generico puoi metterci dentro qualsiasi Object, e quindi non hai un controllo da parte del compilatore.

ale500
13-08-2005, 11:39
benissimo... :D

Loading