Non ho capito al 100% la tua idea:
comunque io lo farei grosso modo cosi :
nella GUI hai un bottone che inizia la computazione in back ground
ovvero nell ActionListener del bottone crei uno SwingWorker.
codice:
new SwingWorker<TipoDatiDaComputare,Void> {
public TipoDatiDaComputare doInBackground() {
TipoDatidaComputare ret = computaDati();
return ret;
}
public void done(){ // viene automaticamente eseguito nell Event Dispatching Thread
TipoDatidaComputare ret = get();
visualizzaNellaGui(ret);
}
}.execute();
Automaticamente ti esegue doInBackground in un thread in background e done nell'EDT (dato che non e' consigliabile modificate i componenti dell-interfaccia grafica fuori dall EDT)
Poi se approfondisci la documentazione, scoprirai che puoi fare altre cose come pubblicare dei risultati temporanei della computazione in background o anche visualizzare una ProgressBar e dare all utente la possibilita' di interrompere la computazione se si stufa.
Il tutto senza mai bloccare l'interfaccia grafica a causa di computazioni lunghe nell'EDT