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

    Problema JProgressBar

    Salve, ho una classe Gui, nella quale c'è una Jprogress.
    Dalla gui viene chiamato il metodo di un'altra funzione che fà molti molti calcoli.
    La gui è stata creata come singleton
    quindi dalla classe "analisi" per richiamare la gui basta che uso Gui.getInstance().
    Per aggiornare la jprogress ho creato un thread apparte che mi faccia sempre l'aggiornamento
    con una variabile che viene incrementata nella classe analisi.
    Vi posto un pò di pseudocodice per farmi capire meglio

    Nella Gui:
    codice:
    public JProgressBar getProgress()
    {
    	return this.progress;	
    }
    Nella classe di analisi:

    codice:
    int value =0;
    public void setThread(){
       t = new Thread(new Runnable(){
       public void run(){
       while(true){
          Gui.getInstance().getProgress().setValue(value);
       }
    }});
    }
    public void stopThread(){
       t=null;
    }
    public void startThread(){
       t.start();
    }
    
    public void runcontrols(){
       
       startThread();
       control1();
       control2();
       stopThread();
    }
    
    public void control1(){
       int numCicli = 1000000;
       Gui.getInstance().getProgress().setMaximum(numCicli);
       .
       .
       .
       for(int i=0;i<numCicli;i++){
          .
          .
          .
          value++;
       }
       value=0;
    }
    public void control2(){
       int numCicli = 520000;
       Gui.getInstance().getProgress().setMaximum(numCicli);
       .
       .
       .
       for(int i=0;i<numCicli;i++){
          .
          .
          .
          value++;
       }
       value=0;
    }
    Cos'è che sbaglio?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Benvenuto nel forum.
    Ti invito a prendere visione del Regolamento interno dove sono elencati i punti da tenere presente quando si apre una discussione.
    In particolare, il punto 6 indica le modalità di posting del codice attraverso l'uso degli appositi tag CODE.

    Inoltre, stai chiedendo cos'è che sbagli, ma non hai detto qual è il problema che riscontri...


    Aggiusto il codice, se è indentato.

    Nel frattempo, includi le informazioni mancanti.


    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
    chiedo scusa, d'ora in poi posterò in maniera + cristiana

    Il mio problema è che la progress viene aggiornata solo nel primo metodo e quello che dice di fare il secondo non viene eseguito, mi faccio capire meglio:

    la progress si aggiorna da 0 a max solo nel primo metodo (control1).
    poi viene chiamato l'altro metodo ( control2 ) ma la progress è ferma al suo massimo e non torna a 0 e si rincrementa.

    spero di essermi fatto capire!!
    grazie 1000

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    poi viene chiamato l'altro metodo ( control2 ) ma la progress è ferma al suo massimo e non torna a 0
    Beh, dovrebbe essere il secondo metodo a reimpostare il valore della JProgressBar a 0 (non può mica saperlo da sola che deve tornare a 0).

    All'inizio del metodo, tu re-imposti il valore MAX della JProgressBar... e questo è corretto. Ma non vedo da nessuna parte una re-inizializzazione del "valore attuale" della Progress a 0, ovvero, questo:

    codice:
    Gui.getInstance().getProgress().setValue( 0 );
    che ripristina la JProgressBar al suo valore iniziale (ovvero, 0) prima di ricominciare con le altre elaborazioni.


    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

  5. #5
    alla fine del primo controllo ( control1 ) imposto il valore di value a 0
    e dato che c'è un thread sempre attivo che , di regola, mi dovrebbe aggiornare il valore della progressBar, non ci dovrebbe essere bisogno di rimpostare a 0 il valore.
    Ho poi notato che se chiamo qualche metodo della progress non in un thread a parte, mi si blocca l'interfaccia

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì, ma c'è un bel discorso da fare che riguarda l'EDT (Event Dispatcher Thread).
    Prova a cercare su questo forum, se ne è parlato tante volte.

    Swing non è thread-safe, quindi qualunque modifica venga effettuata ai controlli grafici, essa deve essere fatta nel contesto dell'EDT (che è il thread che si occupa di ridisegnare, appunto, tutto ciò che riguarda la grafica).

    Ecco un punto di partenza: http://forum.html.it/forum/showthrea...readid=1313050


    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

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.