Fechar JFrame através de um botão

Pessoal, eu estou estudando threads e sockets em Java, então decidi procurar um código de chat multithread para estudar. O que eu encontrei e usei pra estudar foi esse: http://www.devmedia.com.br/como-criar-um-chat-multithread-com-socket-em-java/33639
Entretanto eu me deparei com alguns problemas neste código que eu decidi resolver por conta própria, como parte do aprendizado.Um deles que eu não consegui resolver é o fato de eu não conseguir fechar a janela do chat através do botão sair. Ele apenas me desconecta do servidor, o que me impede de enviar ou receber mensagens, entretanto, eu ainda posso clicar no botão enviar e disparar o evento do botão Enviar, e como consequência, chama o método sendMessage, que exige conexão com o servidor. Resumindo, isso fica spamando stackTraces de erros no terminal.
O que eu queria é maneira de encerrar a aplicação ao apertar no botão Sair. Eu tentei usar o método dispose(), mas ele não fecha a janela e chama o JOptionPane que é executado no início da aplicação.

Help-me, pls! :blush:

Os códigos são esses:

É só você verificar o que acontece quando é pressionado o botão para sair, no seu exemplo, é invocado o método exit(), que desconecta do servidor, como você quer que além de desconectar, ele encerre sua aplicação, basta invocar o System.exit(0).

public void exit() {
    try {
        sendMessage("Sair");
        bfw.close();
        outw.close();
        out.close();
        socket.close();
        System.exit(0); // encerra a plicação
    } catch (IOException e) {
        Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, e);
    }
}
1 curtida

Obrigado, funcionou!