Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    pausa del ciclo while

    ciao a tutti! ho un ciclo while, al suo interno vorrei mettere una pausa, io vengo dal C dove si faceva con lo Sleep, ma qua non mi funziona... la mia domanda è, come faccio a mettere una pausa di tot secondi?
    Devo estendere la classe con il Thread? e se sono in un applet come mi comporto?
    grazie.

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

    Re: pausa del ciclo while

    Originariamente inviato da iacoposk8
    ciao a tutti! ho un ciclo while, al suo interno vorrei mettere una pausa, io vengo dal C dove si faceva con lo Sleep, ma qua non mi funziona... la mia domanda è, come faccio a mettere una pausa di tot secondi?
    Devo estendere la classe con il Thread? e se sono in un applet come mi comporto?
    grazie.
    Alt. Thread.sleep() è il metodo per sospendere per un tot di tempo il thread corrente (quello che l'ha invocato, chiaramente).

    Il punto è che questo puoi farlo senza problemi se hai il pieno controllo della interazione con l'utente, ad esempio in una applicazione "console" (dove "sai" quando leggi l'input e quando scrivi in output).

    Ma in una applicazione "grafica" (che sia stand-alone o una applet non cambia), la interfaccia va avanti per "eventi" e c'è il ben noto thread chiamato EDT, che è il singolo thread che si occupa del disegno della interfaccia grafica e del dispacciamento degli eventi. Thread che non si deve mai tenere occupato per troppo tempo (quindi una sleep e per un certo tempo, no!).
    Quindi la questione è vedere cosa devi fare, quando e in base a questo scegliere tra il gestire un thread a parte o usare un timer (java.util.Timer o javax.swing.Timer, anche qui ... dipende).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    mah, in realtà non sarà un applicazione che poi uscirà dal mio pc, è tutto a scopo didattico.. ma in java per scandire del codice con unità di tempo l'unica è usare costrutti come classi ecc o c'è il modo più semplice di mettere Sleep(1000); e basta?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da iacoposk8
    mah, in realtà non sarà un applicazione che poi uscirà dal mio pc, è tutto a scopo didattico.. ma in java per scandire del codice con unità di tempo l'unica è usare costrutti come classi ecc o c'è il modo più semplice di mettere Sleep(1000); e basta?
    Ripeto che a livello di thread, per sospenderlo, basta un:

    Thread.sleep(1000); // 1 sec.

    e nota va presa in considerazione la eccezione InterruptedException.

    Il punto è in quale contesto intendi farlo. Se ad esempio pensavi di farlo nel actionPerformed() di un ActionListener (invocato es. alla pressione di un pulsante), allora NON va bene.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    Re: Re: pausa del ciclo while

    Originariamente inviato da andbin
    Ma in una applicazione "grafica" (che sia stand-alone o una applet non cambia), la interfaccia va avanti per "eventi" e c'è il ben noto thread chiamato EDT, che è il singolo thread che si occupa del disegno della interfaccia grafica e del dispacciamento degli eventi.
    Per le applet si può avere solo un flusso? o ho capito male?

    sarebbe così gentile da elencarmi i vari metodi per poter mandare in pausa un applicazione? poi le differenze fra una e l'altra posso cercarle, bè, se mi vuol dare un breve descrizione lei tanto di guadagnato

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

    Re: Re: Re: pausa del ciclo while

    Originariamente inviato da iacoposk8
    Per le applet si può avere solo un flusso? o ho capito male?
    No, per applet/applicazioni si possono creare/gestire quanti thread si vogliono. Ma per la gestione della interfaccia utente esiste 1 (uno) solo thread che viene convenzionalmente chiamato "EDT" (event dispatch thread). E il fatto che sia uno solo per la interfaccia utente ..... porta a delle conseguenze (da comprendere e sapere).

    Originariamente inviato da iacoposk8
    sarebbe così gentile da elencarmi i vari metodi per poter mandare in pausa un applicazione?
    Ma l'ho già detto almeno 2 volte. A livello di thread c'è la sleep() di Thread. Tecnicamente ci sono anche i wait() di qualunque oggetto (ma servono insieme ai notify()/notifyAll() per la gestione delle condition queue, ovvero per una forma di attesa/notifica, quindi per il momento, ignorali).

    E poi per fare qualcosa di "temporizzato" ci sono 2 tipi di timer: java.util.Timer e javax.swing.Timer. Differenti per concetto e implementazione (e contesti in cui usarli).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    a! scusami, non avevo capito! quindi ok, se faccio una cosa tipo:
    codice:
    public class Test {
    	public static void main(String[] args)throws Exception {
    		  Thread.sleep(3000);
    		  System.out.println("Hello world");
    	}
    
    }
    va, però se lo metto in un applet oltre alla riga Thread.sleep(3000); devo aggiungere l'eccezione e se scrivo public void paint(Graphics g)throws Exception
    però eclips mi dice multiple marker at this line e non so come risolverlo

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da iacoposk8
    però se lo metto in un applet oltre alla riga Thread.sleep(3000); devo aggiungere l'eccezione e se scrivo public void paint(Graphics g)throws Exception
    Primo: il metodo di Component di cui fare l'override è:

    public void paint(Graphics)

    senza eccezioni dichiarate. E secondo le regole (che dovresti sapere, almeno queste) il metodo che fa l'override (cioè il tuo) NON può dichiarare eccezioni checked in più o più "ampie" rispetto al metodo di cui fa l'override.

    Secondo: NON si devono fare sleep() in un paint(). Vuoi disegnare qualcosa che cambia in modo "temporizzato"? Allora devi mantenere uno "stato" (variabili di istanza) che indica cosa disegnare di volta in volta, poi usi un timer (di norma meglio javax.swing.Timer). Ad ogni evento del timer, aggiorni lo stato per indicare cosa disegnare e chiedi un repaint() del componente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da iacoposk8 e se scrivo public void paint(Graphics g)throws Exception
    però eclips mi dice multiple marker at this line e non so come risolverlo
    La firma del metodo è public void paint(Graphics g). Non puoi aggiungere o modificare i "pezzi". L'eccezione pertanto non deve uscire da quel metodo...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    e quindi come posso aggiungercela?

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.