Boa tarde. Estou tentando fazer um chat e estou com um erro que não consigo identificar a origem: 'invalid type code: AC'.
O erro ocorre após a conexão do usuário, quando tento escrever uma mensagem.
Seguem as classes:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jogo;
import java.io.Serializable;
/**
*
* @author marcio
*/
public class Usuario implements Serializable {
private String nome;
public Usuario(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Override
public int hashCode() {
int hash = 3;
return hash;
}
@Override
public boolean equals(Object o) {
if (o instanceof Usuario) {
return ((Usuario) o).getNome().equals(getNome());
}
return false;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jogo;
import java.io.*;
import java.net.Socket;
/**
*
* @author marcio
*/
public class SocketCliente extends Thread {
private static Socket conexao;
private static Usuario usuario;
public SocketCliente(Socket socket) {
conexao = socket;
}
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 9999);
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Digite seu nome:");
String nome = teclado.readLine();
usuario = new Usuario(nome);
ObjectOutputStream saida = new ObjectOutputStream(socket.getOutputStream());
saida.writeObject(usuario);
saida.reset();
Thread execucao = new SocketCliente(socket);
execucao.start();
while (true) {
System.out.println("Mensagem >");
String texto = teclado.readLine();
Mensagem mensagem = new Mensagem(texto, usuario, null);
saida.writeObject(mensagem);
saida.flush();
}
}
@Override
public void run() {
try {
ObjectInputStream entrada = new ObjectInputStream(conexao.getInputStream());
while (true) {
Mensagem mensagem = (Mensagem) entrada.readObject();
if (usuario.equals(mensagem.getDestinatario())) {
System.out.println(mensagem.getDestinatario().getNome() + " disse > " + mensagem.getMensagem());
System.out.println("Responder >");
}
}
} catch (IOException e) {
System.out.println("Erro 3: " + e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println("Erro 4: " + e.getMessage());
}
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jogo;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
/**
*
* @author marcio
*/
public class SocketServidor extends Thread {
private static ArrayList<Usuario> usuarios;
private Socket conexao;
private Usuario servidor;
public SocketServidor(Socket conexao) {
this.conexao = conexao;
this.servidor = new Usuario("servidor");
}
public static void main(String[] args) throws Exception {
usuarios = new ArrayList<Usuario>();
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("Servidor rodando");
while (true) {
Socket socket = serverSocket.accept();
Thread execucao = new SocketServidor(socket);
execucao.start();
}
}
@Override
public void run() {
ObjectInputStream entrada;
try {
entrada = new ObjectInputStream(conexao.getInputStream());
Object leitura = entrada.readObject();
Usuario usuario = (Usuario) leitura;
if (usuarios.contains(usuario)) {
System.out.println(usuario.getNome() + " já está na sala.");
conexao.close();
return;
} else {
System.out.println(usuario.getNome() + " conectado.");
Mensagem mensagem = new Mensagem(usuario.getNome() + " entrou na sala.", servidor, null);
envia(mensagem);
usuarios.add(usuario);
}
while (true) {
Object objeto = entrada.readObject();
if (objeto instanceof Mensagem) {
Mensagem mensagem = (Mensagem) objeto;
envia(mensagem);
}
}
} catch (IOException e) {
System.out.println("Erro 1: " + e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println("Erro 2: " + e.getMessage());
}
}
public void envia(Mensagem mensagem) throws IOException {
ObjectOutputStream saida = new ObjectOutputStream(conexao.getOutputStream());
for (Usuario usuario : usuarios) {
if (!mensagem.getRemetente().equals(usuario)) {
if ((mensagem.getDestinatario() == null) || (mensagem.getDestinatario().equals(usuario))) {
mensagem.setDestinatario(usuario);
saida.writeObject(mensagem);
}
}
}
}
}
Alguém pode ajudar?