Salve,
sto cercando di usare una semplice progress bar nel mio JFrame. Il problema è che la progress bar deve iniziare a lavorare solo alla pressione di un pulsante. Quindi tutto avviene all'interno dell'action listner del frame.
Il fatto è che in pratica nonostante aggiorni la progress bar continuamente, il cambiamento mi si visualizza solo alla fine della routine di cui dovrebbe essere appunto la progress bar. In pratica rimane sempre a 0% fino a che la routine non termina, allora si "risveglia" e appare al 100%.
Ho pensato che potrebbe essere che la routine sia troppo pesante come calcoli (in effetti sono 3 cicli annidati!). Allora ho pensato di usare la SwingUtilities.invokeAndWait() la quale permette di runnare un thread separato che viene eseguito prima del chiamante, il quale prima di continuare attende la terminazione di tale thread secondario. In pratica avrei:
Nell'action listener del JFrame principale:
Così ho pensato che la RoutinePienaDiCicli() non sarebbe avanzata fino a quando la progress bar non fosse stata aggiornata. Risultato: mi dà un errore in cui mi dice che non posso usare la invokeAndWait() dentro l'event dispatcher!!!codice:... public void RoutinePienaDiCicli() { ... Runnable aggiornaProgressBar = new Runnable() { public void run() { progressBar.setValue(xxx); } }; SwingUtilities.invokeAndWait(aggiornaProgressBar); ... }
Consigli, chiarimenti?
grazie