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

    aggiornare jTextField in running

    Ciao ragazzi ..

    provavo a fare un semplice countdown .. il tutto funziona da terminale e anche le varie stampe.

    Ho riportato tutto con interfaccia .. ma jTextField2.setText(Integer.toString(gcalendar.get (Calendar.SECOND))); non mi aggiorna i nuovi valori mentre fa il conto alla rovescia ..

    ho notato che lo fa a fine ciclo .. quando ha finito tutto .. e mette ovviamente tutto a 0.


    che devo fare per vedere il conto alla rovescia?

    grazie !!

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: aggiornare jTextField in running

    Originariamente inviato da gargamella81
    Ciao ragazzi ..

    provavo a fare un semplice countdown .. il tutto funziona da terminale e anche le varie stampe.

    Ho riportato tutto con interfaccia .. ma jTextField2.setText(Integer.toString(gcalendar.get (Calendar.SECOND))); non mi aggiorna i nuovi valori mentre fa il conto alla rovescia ..

    ho notato che lo fa a fine ciclo .. quando ha finito tutto .. e mette ovviamente tutto a 0.


    che devo fare per vedere il conto alla rovescia?

    grazie !!
    Senza vedere il codice non possiamo dirti molto... Ad occhio sembrerebbe un problema di thread. Dove chiami il setText()? In seguito ad un evento? Se è così tu stai tenendo occupato per il countdown l'EDT, "congelando" l'interfaccia del tuo programma. Ma ripeto, senza vedere il codice potrei averti detto una boiata.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    È vero, come dice Alex'87, che senza vedere il codice non è che si può capire e dire tutto ..... però per quello che mi capita spesso di vedere, il problema è quasi sempre, al 99%, proprio quello relativo al "threading" in Swing e al tener "impegnato" il EDT.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    ops scusate .. vi posto il codice .. :P

    codice:
    private void jToggleButton1MouseClicked(java.awt.event.MouseEvent evt){
         GregorianCalendar gcalendar = new GregorianCalendar();
         int ore = Integer.parseInt(jTextField1.getText());
         int minuti =  Integer.parseInt(jTextField2.getText());
         int secondi =  Integer.parseInt(jTextField3.getText());
         while (ore >= 0){
              gcalendar.set(Calendar.HOUR, ore);
              while (minuti >= 0){
                   gcalendar.set(Calendar.MINUTE, minuti);
                   while (secondi >= 0){
                        gcalendar.set(Calendar.SECOND, secondi);
                        jTextField1.setText(Integer.toString(gcalendar.get(Calendar.HOUR)));
                        jTextField2.setText(Integer.toString(gcalendar.get(Calendar.MINUTE)));
                        jTextField3.setText(Integer.toString(gcalendar.get(Calendar.SECOND)));
                        try{
                             Thread.sleep(1000L);
                        } catch(InterruptedException _ex){}
                        secondi--;
                   }
                   minuti--;
                   secondi = 59;
              }
              ore--;
              minuti = 59;
         }
         try {
              Runtime.getRuntime().exec("halt");
         }catch (IOException ex) {
              Logger.getLogger(SpegnereView.class.getName()).log(Level.SEVERE, null, ex);
         }
    }

  5. #5
    Per risolvere puoi sfruttare la classe Timer di Java. Ad esempio una cosa del tipo:

    Codice PHP:
    final Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
         
         
    int secondi 60;   //valore di esempio
         
         
    public void run() {
              
    tuoTextField.setText(String.valueOf(secondi--));
              if (
    i0){
                   
    timer.cancel();
              }
         }
    }, 
    01000); //ripete l'azione ogni 1000 millisecondi = 1 secondo 
    Poi dovrai gestire opportunamente minuti e ore...
    Al mio segnale... scatenate l'inferno!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da R@ve M@ster
    Codice PHP:
    final Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
         
         
    int secondi 60;   //valore di esempio
         
         
    public void run() {
              
    tuoTextField.setText(String.valueOf(secondi--)); 
    No, sbagliato. Non tanto per quello che hai scritto ma per la solita questione concettuale che quel timer (java.util.Timer) fa "girare" il run nel contesto di un thread che non è il EDT, pertanto andare ad agire sui componenti ad esempio con tuoTextField.setText() non è sicuro/appropriato.

    In generale se il "lavoro" temporizzato è breve/veloce e si limita ad agire sulla interfaccia utente, allora si potrebbe usare un javax.swing.Timer.

    java.util.Timer si può usare, ma il setText() va fatto "passare" nel EDT con il solito SwingUtilities.invokeLater()
    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.