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