A GUI do swing Java congela

Eu estou escrevendo um aplicativo de GUI cliente / servidor Java usando soquetes e aqui está o problema:

Eu tenho um botão para começar a ouvir uma porta específica:

botão actionPerformed method

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

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

Aqui está o método socket.listen

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

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

A classe "socket" estende "Thread"
Então, depois de ss.accept () retornar um valor, ele cria uma nova instância de soquete em um thread separado.

Depois de clicar no botão, a GUI congela, porque dentro do método socket.listen existe um loop infinito. Como posso evitar isso?

questionAnswers(5)

yourAnswerToTheQuestion