Olá comunidade, preciso mostrar os clientes online em um chat em Java RMI.
O chat está funcionando normalmente, tentei criar um ArrayList para armazenar os nomes dos clientes porém não deu certo… Mostra apenas o nome do usuário de cada cliente separado, não funciona na thread. Alguém teria uma ideia de como fazer?
- Pra mostrar online, digita-se !online
O código do cliente está assim:
import java.rmi.*;
import javax.swing.*;
import java.util.Scanner;
import java.lang.Thread.*;
import java.util.ArrayList;
import java.rmi.RemoteException;
public class Cliente {
public static void main(String args[]) {
try {
final ServidorChat chat = (ServidorChat) Naming.lookup("rmi://localhost:1098/ServidorChat");
String nome;
String msg = "";
Scanner scanner = new Scanner(System.in);
System.out.println("* Digite seu nick: ");
nome = scanner.nextLine();
ArrayList<String> usr_online = new ArrayList();
usr_online.add(nome);
System.out.println("* Seja bem vindo(a) " + nome);
System.out.println("* Para sair do chat digite '!sair'");
Thread thread = new Thread(new Runnable() {
int cont = chat.lerMensagem().size();
@Override
public void run() {
try {
while (true) {
if (chat.lerMensagem().size() > cont) {
System.out.println(chat.lerMensagem().get(chat.lerMensagem().size() - 1));
cont++;
}
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
thread.start();
chat.enviarMensagem("* "+nome + " entrou na sala");
while (!"sair".equals(msg)) {
//System.out.println(nome+": ");
if(msg.equals("!online")){
for(String user : usr_online){
System.out.println(user);
}
}
msg = scanner.nextLine();
chat.enviarMensagem(">> "+nome + ": " + msg);
// System.out.println(chat.lerMensagem().get(cont));
}
//chat.enviarMensagem("* "+nome + " saiu na sala");
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}