Olá para a galera que está lendo isso. meu problema é o seguinte: tenho uma janela chat que se comunica com outra através do servidor por um método “run”, porém, quando uma dessas janelas sai, o nome do usuario da janela que saiu ainda continua na lista de usuarios on, até ai td bem, mas quando tento mandar uma mensagem parar esse usuario off, ele retorna no meu textArea o meu nome + a minha mensagem, sendo que eu preciso que apenas limpe o textarea e remova o usuario off da lista (isso já acontece, mas aparece essas informacoes que eu disse). segue o codigo:
MÉTODO PARAR ENVIAR MENSAGENS PARA O SERVIDOR:
public void enviar(String msgT) {
if(msgT == null || msgT.isEmpty()) {
return;
}
Object usuario = list.getSelectedValue();
if(usuario!=null) {
textArea.append("Eu -> "+msgT);
textArea.append("\n");
escritor.println(Comandos.MENSSAGEM+usuario);
escritor.println(msgT);
txtMsg.setText("");
}else {
JOptionPane.showMessageDialog(Cliente.this, "Selecione um usuário.","Atenção!", JOptionPane.WARNING_MESSAGE);
return;
}
}
MÉTODO DO SERVIDOR PARAR LER AS MENSAGENS RECEBIDAS DO USUARIO:
@Override
public void run(){
try {
leitor = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
escritor = new PrintWriter(cliente.getOutputStream(), true);
efetuarLogin();
String msg;
while(true) {
msg = leitor.readLine();
if(msg.startsWith(Comandos.MENSSAGEM)) {
String Ndestinatario = msg.substring(Comandos.MENSSAGEM.length(), msg.length());
System.out.println("Enviando para: "+Ndestinatario);
Gerenciador destinatario = clientes.get(Ndestinatario);
if(destinatario==null) {
escritor.println("O cliente informado não existe!");
escritor.println(Comandos.USUARIO_VAZIO);
}else {
destinatario.getEscritor().println(this.nomeCliente+ " disse: " + leitor.readLine());
}
//listar nome de todos os clientes on
}else if(msg.equals(Comandos.LISTA_USUARIOS)) {
attListaUs(this);
}else {
escritor.println(this.nomeCliente+" disse -> "+msg);
}
}
}catch(IOException e) {
System.err.println("O cliente fechou a conexão.");
clientes.remove(this.nomeCliente);
e.printStackTrace();
}
}
Obs: eu já tentei usar um “break” no
if(destinatario==null) {
escritor.println("O cliente informado não existe!");
escritor.println(Comandos.USUARIO_VAZIO);
}
para evitar de chegar no
}else {
escritor.println(this.nomeCliente+" disse -> "+msg);
}
mas ele mata meu método
, aí a parte do destinatario==null nao funciona, o nome do usuario continua na lista e o chat praticamente nao envia mais nada pro servidor.
MÉTODO PARA LER MENSAGENS DO SERVIDOR:
public void leitor() {
try {
while(true) {
String msg = leitor.readLine();
if(msg == null || msg.isEmpty())
continue;
if(msg.equals(Comandos.LISTA_USUARIOS)) {
String [] usuarios = leitor.readLine().split(",");
preencherlista(usuarios);
}else if(msg.equals(Comandos.LOGIN)) {
escritor.println(txtNome.getText());
}else if(msg.equals(Comandos.LOGIN_NEGADO)){
JOptionPane.showMessageDialog(Cliente.this, "Usuário inválido!","Atenção!",JOptionPane.WARNING_MESSAGE);
attLista();
System.exit(0);
}else if(msg.equals(Comandos.LOGIN_ACEITO)) {
attLista();
}else if(msg.equals(Comandos.USUARIO_VAZIO)){
JOptionPane.showMessageDialog(Cliente.this, "Usuário deslogado!","Atenção!",JOptionPane.WARNING_MESSAGE);
textArea.setText(null);
attLista();
}else{
textArea.append(msg);
textArea.append("\n");
textArea.setCaretPosition(textArea.getDocument().getLength());
}
}
}catch(IOException e) {
e.printStackTrace();
}
}
já to a tanto tempo quebrando a cabeça com essa coisa que nem almocei e quase não to conseguindo escrever esse post kkkkk, mas ainda sim é divertido.
Agradeço desde já a atenção!