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

    [java] spedire un segnale/evento

    Ciao a tutti,
    vorrei fare un programma che attiva una specie di timer, fa delle operazioni e, al momento in cui il timer ha finito il suo countdown, riceve un segnale, un'eccezione, un evento... insomma qualcosa che blocchi il suo lavoro e faccia cambiare il flusso di esecuzione.
    Cosa posso usare? C'e' una qualche classe particolare che mi puo' aiutare?
    bye

  2. #2
    javax.swing.Timer genera un ActionEvent ogni tot millisecondi, pero' esegue in un thread separato...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    Ho provato la tua idea con una classe di test ma mi si e' presentato un problema; io ho una classe servizio cosi' definita:

    public Servizio{
    public String getWeather(...){
    ...
    }
    }

    il metodo getWeather() viene invocato da classi esterne e puo' impiegare molto tempo.

    Io vorrei che dopo n secondi, se l'esecuzione nn e' ancora terminata, esso torni una stringa del tipo "nn sono riuscito a soddisfare la tua richiesta negli n secondi che ti avevo promesso".

    Se io trasformo Servizio in un action listener, quando questo riceve l'evento dal Timer come fa a ritornare la stringa sopra riportata alla classe che ha invocato getWeather()?

    bye

  4. #4
    Allora... Vediamo un po'...

    Ti dico la prima idea, un po' nebulosa, che mi e' passata per la testa.

    Prendi la parte "pesante" di getWeather e infilala nel run() di un oggetto Thread.
    La parte "leggera":

    - inizializza la stringa con il messaggio di errore;
    - lancia il Thread con start() e resta in attesa della terminazione (o del join()?) usando un parametro temporale che tu decidi. In pratica fai una wait bloccante ma temporizzata.
    - dopo tot millisencodi, se non c'e' stato il join, devi occuparti di "ammazzare" il thread birichino. Ricordati che i metodi stop(), resume() e suspend() sono stati deprecati. D'altronde, spesso e volentieri... funzionano!

    Se il thread ha completato l'esecuzione, la stringa dovrebbe contenere il risultato, altrimenti ci sara' il messaggio di errore. Ovviamente puoi programmare un meccanismo un po' piu' sofisticato, usando un flag booleano.

    Spero si sia capito, neanch'io ho le idee chiarissime a riguardo...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  5. #5
    mmm ci penso e poi ti faccio sapere...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.