Java swing GUI se congela

Estoy escribiendo una aplicación de GUI de cliente / servidor Java usando sockets y aquí está el problema:

Tengo un botón para comenzar a escuchar un puerto específico:

botón de acción método ejecutado

private void listenButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    int port = Integer.parseInt(portTextfield.getText(), 10);

    try {
        socket.listen(port);
    } catch (IOException ex) {
    }
}

Aquí está el método socket.listen

public static void listen() throws IOException {
    ServerSocket ss = new ServerSocket(port);

    while (true)
        new socket(ss.accept());
}

"socket" clase se extiende "Hilo"
Entonces, después de que ss.accept () devuelve un valor, crea una nueva instancia de socket en un hilo separado.

Después de hacer clic en el botón, la GUI se congela porque dentro del método socket.listen hay un bucle infinito. ¿Cómo puedo evitar eso?

Respuestas a la pregunta(5)

Su respuesta a la pregunta