cicciomaz ha scritto:
Aspetta forse mi sono spiegato male. Deve rimanere bloccata la dialog ma la Main che l'ha lanciata deve ptoseguire il suo lavoro e appena lo termina la chiude
No, allora non hai ancora compreso bene lo scenario. Quando sei nel actionPerformed per il pulsante che lancia quel "caricamento", sei nel contesto del Event Dispatch Thread (come per qualunque altro evento della GUI). Il EDT NON lo si deve mai tenere "impegnato" per troppo tempo, altrimenti la interfaccia è congelata e non responsiva.
Quindi di qualunque cosa si tratti quel "caricamento", se è particolarmente lungo NON lo puoi di certo fare nel contesto del EDT. Per forza DEVI farlo nel contesto di un thread di background a parte, con tutto quello che comporta (visibilità delle modifiche, sincronizzazione, ecc... che vanno compresi bene).
Alla fine del thread di caricamento, farai passare un pezzetto di codice nel EDT (con il "solito" invokeLater) per chiudere la dialog "caricamento in corso". Il setVisible(true) della dialog "modale", quindi si sbloccherà e ritornerà, pertanto continuerai a fare quello che stavi facendo nel listener.
Questo è lo scenario da applicare. Poi ci possono essere vari approcci e design. Da Java 6 non a caso è stata introdotta ufficialmente in Swing la classe SwingWorker che serve proprio per gestire un lavoro in un thread di "background" facilitando allo stesso tempo la interazione con la interfaccia utente, che va sempre fatta nel EDT.