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

    Progress Bar

    Ciao a tutti, sto facendo un piccolo applicativo in java, e ho bisogno di una progressBar, ho un problema, mi aggiorna il valore della progressBar solo alla fine del esecuzione del ciclo:

    vi posto il codice

    codice:
    public void inviaSms(){
            ...
               ProgessBar d = new ProgessBar(this,count);
               Thread t = new Thread(d);
               t.start();
                for (int i=0; i<count; i++){
                        String num = jTable1.getValueAt(i, 2).toString();
                        s.mandaSms(num, ss);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Launch.class.getName()).log(Level.SEVERE, null, ex);
                }
                }
               ...
    codice:
    public void updateProgressBar(double i){
            progressBar.setValue((int)i);
        }
    codice:
    package gui;
    
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class ProgessBar implements Runnable{
    
        Launch context;
        int count;
    
        public ProgessBar(Launch context, int c){
            this.context=context;
            this.count=c;
        }
    
        public void run() {
                double i=0;
                double valore=100/count;
                while (i<100){
                context.updateProgressBar(i);
                try {
                    Thread.sleep(50);
                } catch (InterruptedException ex) {
                    Logger.getLogger(ProgessBar.class.getName()).log(Level.SEVERE, null, ex);
                }
                i+=valore;
                }
        }
    }
    Dove sbaglio?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Se il primo metodo che hai postato ( inviaSms() ) viene eseguito nel contesto dell'EDT, allora è lui la causa:

    codice:
    for (int i=0; i<count; i++){
                        String num = jTable1.getValueAt(i, 2).toString();
                        s.mandaSms(num, ss);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Launch.class.getName()).log(Level.SEVERE, null, ex);
                }
                ...
    Se questa parte di codice è lunga, stai impegnando l'EDT. Prova a spostare anche questa parte in un thread separato.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    ok grazie mille, adesso provo.. Anche perchè il metodo inviaSms ci mette un po', dai 5 ai 10 minuti (in base al numero di sms da mandare)..

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