javhazard
06-06-2011, 23:12
Studio java da 6 mesi e quindi trovo regolarmente degli intoppi come questo:
la barra Progressive che viene riempita con jProgressBar.setValue(x) dove x è il livello di riempimento, viene riempito di colpo.
Se volessi riempire il livello gradualmente, per esempio in 5 o 10 secondi, come farei? Ho ideato per questo l'attesa come mostrato nel codice qui sotto, ma lì accade l'incredibile. Tutto il ciclo for con le attese fatte con while vengono eseguite, e poi soltanto dopo vediamo la barra che si riempie sempre di colpo, anche se passando per tutti le i riempimenti progressivi che avrebbero dovuto dare l'impressione del riempimento graduale.
Ho usato jprogressBar messo verticalmente per imitare il riempimento di un bicchiere.
private void RiempiIlBicchiere(int livello){
//riempie il bicchiere nel tempo che ci vuole.
long tempo=100,inizio,intervallo;
int i;
for(i=0;i<=livello;i++){
//Intervallo di tempo per dare "tempo" al riempimento del bicchiere.
inizio=System.currentTimeMillis();
System.out.println(String.valueOf(inizio));
intervallo=0;
System.out.println(String.valueOf(i));
//Il test serve per essere sicuri che jProgressBar1.setValue(i) sia fatto.
if (jProgressBar1.getValue()==i-1){
while(intervallo<tempo){
intervallo=System.currentTimeMillis()-inizio;
}
}
System.out.println(String.valueOf(intervallo));
while (!jProgressBar1.isVisible()){
}
jProgressBar1.setValue(i);
}
}
I System.out.println sono lì solo per vedere cosa succede. Poi ho messo vari test nel vano tentativo di imporre al jProgressivBar di mostrare ogni 100 ms un riempimento di i% e questo fino al livello massimo chiamato "livello".
Come mai accade una roba di questo genere? E' come se ci fosse una separazione fra l'esecuzione del codice e la visualizzazione sullo schermo!
Grazie per l'attenzione
la barra Progressive che viene riempita con jProgressBar.setValue(x) dove x è il livello di riempimento, viene riempito di colpo.
Se volessi riempire il livello gradualmente, per esempio in 5 o 10 secondi, come farei? Ho ideato per questo l'attesa come mostrato nel codice qui sotto, ma lì accade l'incredibile. Tutto il ciclo for con le attese fatte con while vengono eseguite, e poi soltanto dopo vediamo la barra che si riempie sempre di colpo, anche se passando per tutti le i riempimenti progressivi che avrebbero dovuto dare l'impressione del riempimento graduale.
Ho usato jprogressBar messo verticalmente per imitare il riempimento di un bicchiere.
private void RiempiIlBicchiere(int livello){
//riempie il bicchiere nel tempo che ci vuole.
long tempo=100,inizio,intervallo;
int i;
for(i=0;i<=livello;i++){
//Intervallo di tempo per dare "tempo" al riempimento del bicchiere.
inizio=System.currentTimeMillis();
System.out.println(String.valueOf(inizio));
intervallo=0;
System.out.println(String.valueOf(i));
//Il test serve per essere sicuri che jProgressBar1.setValue(i) sia fatto.
if (jProgressBar1.getValue()==i-1){
while(intervallo<tempo){
intervallo=System.currentTimeMillis()-inizio;
}
}
System.out.println(String.valueOf(intervallo));
while (!jProgressBar1.isVisible()){
}
jProgressBar1.setValue(i);
}
}
I System.out.println sono lì solo per vedere cosa succede. Poi ho messo vari test nel vano tentativo di imporre al jProgressivBar di mostrare ogni 100 ms un riempimento di i% e questo fino al livello massimo chiamato "livello".
Come mai accade una roba di questo genere? E' come se ci fosse una separazione fra l'esecuzione del codice e la visualizzazione sullo schermo!
Grazie per l'attenzione