Hola:
En java todo el tema de ventanas y botones va en un hilo separado que se llama EDT (Event Dispatch Thread). Ese hilo es distinto del hilo principal del main de la aplicación.
Si tu main crea ventanas y luego se queda bloqueado en espera de algo, las ventanas van a funcionar porque están en un hilo separado.
Si como consecuencia de la pulsación de un botón, teclado, o cualquier evento relativo a ventanas haces código que se quede bloqueado, ese código se está ejecutando en el hilo de ventanas EDT, puesto que viene de un evento de una ventana, y se quedan todas bloqueadas.
Más info aquí
http://chuwiki.chuidiang.org/index.p...hread)_de_Java
En general, suele ser buena idea hacer que las llamadas que se puedan quedar bloqueadas (accept() y read() de sockets), se ejecuten en un hilo separado sólo para ellas.
Se bueno.