Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446

    [JAVA]utilizzo di Timer per impedire un azione

    Ragazzi ho navigato un po' nel forum ma non ho trovato quello che cerco.Ho visto si diversi esempi di timer ma non posso modellarli a mio piacimento,difatti quello che cerco è sì un timer ma utilizzato per impedire una determinata cosa prima dello scadere di questo e non di farla allo scadere.

    esempio assurdo:

    if(timer.finito==false)
    System.out.println("non puoi scrivere prima di altri"+xx+"secondi");

    spero di essermi spiegato

  2. #2
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446
    mmm non trovo nulla, e dire che ci sono due classi timer O.o

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ma il problema direi che è un altro. Tu hai scritto un test:

    if(timer.finito==false)

    Vuoi eseguirlo una volta sola?? Più volte a distanza di tot tempo? Perché questa è una operazione di "polling".

    Cioè ammettiamo che testi la condizione è il timer non è finito, stampi ad esempio "non puoi scrivere prima di altri 5 secondi". E poi?? Fai un loop? Vuoi ritestare la condizione in modo che stampi successivamente "non puoi scrivere prima di altri 4 secondi" e così via??

    È questo che devi spiegare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446
    ciao andbin, mi spiego meglio, l'utente invia un messaggio appena questo viene spedito si avvia il timer di 5 secondi, in modo del tutto silente, se l'utente prova a rimandare un messaggio PRIMA che i secondi siano trascorsi il programma avverte che non può farlo e che mancano ancora x secondi, tutto qui(sarà compito mio poi creare un nuovo timer, o farlo ripartire, ogni volta che l'utente mandi un messaggio).Spero che così vada meglio Grazie

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da energie
    l'utente invia un messaggio appena questo viene spedito si avvia il timer di 5 secondi, in modo del tutto silente, se l'utente prova a rimandare un messaggio PRIMA che i secondi siano trascorsi il programma avverte che non può farlo e che mancano ancora x secondi
    Ok, ma devi farlo in una interfaccia utente grafica o su una console? Perché bisogna vedere cosa devi "bloccare".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446
    console

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quello che devi fare è sostanzialmente un "polling", senza bloccare alcunché. Devi solo determinare se non si è ancora arrivati ad un certo istante nel tempo e in tal caso sapere quanti secondi rimangono.

    Con uno scenario come questo non serve nemmeno usare un "timer"! Basta solo ragionare appunto in termini di "istante" del tempo.

    Prova questo, così vediamo se ho capito bene cosa ti serve:

    codice:
    import java.util.*;
    
    public class Prova
    {
        public static void main (String[] args)
        {
            Scanner sc = new Scanner (System.in);
    
            Waiter waiter = new Waiter (10);    // 10 secondi
    
            do {
                System.out.print ("comando: ");
                String line = sc.nextLine ();
    
                if (waiter.isWaiting ())
                {
                    int seconds = waiter.getSecondsToWait ();
                    System.out.println ("Devi aspettare ancora " + seconds + (seconds == 1 ? " secondo" : " secondi"));
                }
                else
                {
                    waiter.start ();
                    System.out.println ("....lavoro....");
                }
            } while (true);
        }
    }
    
    
    class Waiter
    {
        private int seconds;
        private long targetTime;
    
        public Waiter (int seconds)
        {
            this.seconds = seconds;
        }
    
        public void start ()
        {
            if (System.currentTimeMillis () > targetTime)
                targetTime = System.currentTimeMillis () + seconds * 1000;
        }
    
        public boolean isWaiting ()
        {
            return System.currentTimeMillis () < targetTime;
        }
    
        public int getSecondsToWait ()
        {
            return (int) ((targetTime - System.currentTimeMillis () + 1000) / 1000);
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446
    pensavo ci fosse qualcosa di più semplice a dire il vero, cmq credo ci sia qualche errore, mi stampa (per non dire flodda) con il messaggio :

    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 9 secondi
    Devi aspettare ancora 8 secondi
    Devi aspettare ancora 8 secondi

    e così via

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da energie
    pensavo ci fosse qualcosa di più semplice a dire il vero
    Più semplice di così ..... ho fatto una classe a sé stante (vogliamo fare le cose riutilizzabili?) che semplicemente si tiene internamente una informazione su un certo istante più avanti nel tempo e poi verifica solo se quell'istante è già superato oppure. Mi sembra un concetto molto semplice e lineare.

    Originariamente inviato da energie
    cmq credo ci sia qualche errore
    Nessun errore .... nel mio esempio solo quando premi INVIO alla richiesta del comando allora stampa (se è in waiting, chiaramente) il messaggio che dice di aspettare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.