Previene la chiusura dell’interfaccia utente di Swing durante un’attività in background

Ho un’applicazione swing che memorizza un elenco di oggetti. Quando gli utenti fanno clic su un pulsante,

Voglio eseguire due operazioni su ciascun object nell’elenco, e una volta completato, grafico i risultati in un JPanel. Ho provato SwingWorker, Callable & Runnable per eseguire l’elaborazione, ma non importa quello che faccio, mentre elabora l’elenco (che può richiedere alcuni minuti, dato che è legato all’IO), la GUI è bloccata.

Ho la sensazione che sia probabilmente il modo in cui sto chiamando i thread o qualcosa del genere, o potrebbe avere a che fare con la funzione grafica? Questo non è threaded in quanto è molto veloce.

Devo fare anche le due fasi di lavorazione, quindi qual è il modo migliore per garantire che il secondo abbia aspettato il primo? Ho usato join (), e poi

while(x.isAlive()) { Thread.sleep(1000); } 

per cercare di garantire questo, ma sono preoccupato che questa potrebbe essere la causa del mio problema.

Ho cercato dappertutto alcune indicazioni, ma poiché non riesco a trovarne sono sicuro che sto facendo qualcosa di stupido qui.