Questo accade perchè non conosci la programmazione concorrente (i thread), né conosci l'interazione tra thread e componenti grafici in Swing; di conseguenza, stai tenendo impegnato l'EDT (Event Dispatch Thread), cioè il thread che si occupa di tutta la gestione dell'interfaccia grafica.
Nulla di male: ci siamo passati tutti.
Ti consiglio di documentarti sui thread (e la programmazione concorrente) quindi, di dare un'occhiata a tutto ciò che parla di EDT.
Puoi partire dal tutorial Oracle sulla
Concurrency in Swing.
Infine, quello che ti servirà per ottenere quello che desideri, si trova nello stesso tutorial, quando parla degli
Swing Workers.
Ciao