Usa un altro Runnable, che chiamiamo "showProgression", così lo puoi accodare nell'EDT prima di "buildInterface".
Naturalmente devi passare a "buildInterface" una reference che punti al componente grafico da lanciare in "showProgression" in modo da poter fermare la ProgressBar e chiudere la relativa finestra appena la GUI è inizializzata (cioè al termine del processo definito in "buildInterface")
A questo punto ti potresti definire i due Runnable come classi al di fuori del metodo actionPerformed, che si limiterà a schedulare correttamente i due "task":
Codice:
public void actionPerformed(ActionEvent e)
{
// costruisce "showProgression" e lo accoda nell'EDT
ShowProgression progressionFrame = new ShowProgression();
SwingUtilities.invokeLater(progressionFrame);
// costruisce "buildInterface", passa riferimento al "showProgression"
// da chiudere al completamento e lo accoda nell'EDT
SwingUtilities.invokeLater(new BuildInterface(progressionFrame));
}
Il codice è di puro esempio per illustrare il concetto.
- ShowProgression è una classe che estende JFrame o JDialog (per la versione popup della ProgressBar) e implementa Runnable (così è accodabile come thread da eseguire nell'EDT)
- BuildInterface è una classe che semplicemente estende Thread oppure implementa Runnable.