Quote Originariamente inviata da Polly008 Visualizza il messaggio
sto sviluppando un programma con una GUI semplicissima fatta da due bottoni, una che avvia un ciclo while, l'altro che vorrei lo bloccasse.
Il fatto è che quando il while è in esecuzione la gui non accetta comandi fino alla fine del ciclo.
Normale ... perché tutta la gestione della interfaccia utente cioè disegno dei componenti Swing, notifica degli eventi ai listener e altro è fatta in un unico singolo thread chiamato convenzionalmente Event Dispatch Thread. Se tieni tu "impegnato" il EDT in un ciclo o in un Thread.sleep() o altre computazioni pesanti, è chiaro che il framework in quel frangente di tempo non può proseguire con altre operazioni (disegni, eventi, ecc..).

Le soluzioni sono diverse: se devi fare qualcosa di "temporizzato" ogni tot di tempo e che fa cose brevi/veloci e magari operando sulla interfaccia utente, allora può bastare un timer, intendo javax.swing.Timer .
Se devi fare cose più lunghe, computazioni pesanti o cose del genere, allora è meglio creare un nuovo thread. Con tutto quello che comporta, cioè devi avere chiaro come definire/avviare il thread, come gestire in modo "cooperativo" la terminazione del tuo thread, come rendere "visibili" le modifiche tra il tuo thread e il EDT, ecc...