Boa tarde pessoal, estou com um problema mas não sei nem pelo que procurar. já fiz esse programa 2x sem re-utilizar nada e mesmo assim cai no mesmo erro, pode ser que alguem já tenha passado por isso e saiba como resolve-lo.
Seguinte, tenho um programa servidor, programa cliente e um pacote de objetos que estão na lib de ambos. O servidor armazena uma lista de vôs e seus passageiros, alem de possuir um serversocket que fica escutando conexões. O Cliente tem um socket que envia objetos e o servidor responde.
Quando eu mando um objeto “InfoVoo” ele me retorna a lista de vôos e a quantidade de passageiros corretamente, após isso eu mando exibir a lista de passageiros, que vem corretamente tambem. porem quando eu cadastro um novo passageiro e mando re-exibir a lista não aparece o passageiro novo, só a lista antiga. Fiz o teste de dar um system.out na lista na hora que sai do servidor e na hora que recebe no cliente, no servidor diz que saiu a lista certinha com o passageiro novo, porem na do cliente diz que recebeu a lista antiga, sem o novo cliente. É como se o cliente recebesse a lista antiga e não a nova que o servidor enviou mesmo eu não tendo absolutamente nada estatico.
Estou usando ObjectStreams e todos os objetos são serializados.
Servidor:
private Object processa(Object objeto) {
parent.escreveLog("Processo." + nome + "." + objeto.getClass().getCanonicalName());
if (objeto instanceof InfoVoo) {
return parent.banco.getInfoVoos();
} else if (objeto instanceof ObVoo) {
ObVoo voo = (ObVoo) objeto;
if (voo.getId() != -1) {
voo = parent.banco.getVoo(voo.getId());
Vector<ObPassageiro> passageiros = voo.getPassageiros();
for (int cont = 0; cont < passageiros.size(); cont++) {
System.out.println(passageiros.get(cont).toString()); //Aqui mostra a lista certinha com o novo passageiro
}
return voo;
} else {
return new InfoRetorno(InfoRetorno.ERRO, "Não é permitido cadastrar vôos");
}
} else if (objeto instanceof CadPassageiro) {
CadPassageiro passageiro = (CadPassageiro) objeto;
int id = ObPassageiro.getNovoID();
parent.banco.getVoo(passageiro.getIdVoo()).addPassageiro(new ObPassageiro(id, passageiro.getNome()));
if (parent.banco.getVoo(passageiro.getIdVoo()).getPassageiro(id) != null) {
return new InfoRetorno(InfoRetorno.SUCESSO, "Passageiro cadastrado com sucesso!");
} else {
return new InfoRetorno(InfoRetorno.ERRO, "Não foi possivel cadastrar o passageiro!");
}
}
return new InfoRetorno(InfoRetorno.ERRO, "Objeto desconhecido!");
}
Cliente:
private void acaoAtualizarVoos() {
try {
((ComboInfoVooModel) jComboBox1.getModel()).removeAllElements();
((ListPassageirosModel) jList1.getModel()).removeAllElements();
escreveLog("Atualizando lista de vôos...");
oos.writeObject(new InfoVoo());
InfoVoo[] infos = (InfoVoo[]) ois.readObject();
if (infos.length > 0) {
for (int cont = 0; cont < infos.length; cont++) {
((ComboInfoVooModel) jComboBox1.getModel()).addElement(infos[cont]);
}
} else {
escreveLog("Nenhum vôo cadastrado!");
}
escreveLog("Lista de vôos atualizada!");
} catch (Exception e) {
e.printStackTrace();
escreveLog("Erro ao atualizar vôos");
}
}
private void acaoListaPassageiros() {
try {
((ListPassageirosModel) jList1.getModel()).removeAllElements();
InfoVoo info = ((ComboInfoVooModel) jComboBox1.getModel()).getInfoVoo(jComboBox1.getSelectedIndex());
if (info != null) {
oos.writeObject(new ObVoo(info.getId()));
ObVoo voo = (ObVoo) ois.readObject();
Vector<ObPassageiro> passageiros = voo.getPassageiros();
for (int cont = 0; cont < passageiros.size(); cont++) {
System.out.println(passageiros.get(cont).toString()); //Aqui ele mostra a lista antiga
((ListPassageirosModel) jList1.getModel()).addElement(passageiros.get(cont));
}
escreveLog("Passageiros listados!");
} else {
escreveLog("Vôo não reconhecido!");
}
} catch (Exception e) {
e.printStackTrace();
escreveLog("Erro ao listar passageiros");
}
}
private void acaoCadastrarPassageiro() {
try {
InfoVoo info = ((ComboInfoVooModel) jComboBox1.getModel()).getInfoVoo(jComboBox1.getSelectedIndex());
if (info != null) {
String nome = jTextField2.getText().trim();
if (nome.length() > 0) {
CadPassageiro cad = new CadPassageiro(info.getId(), nome);
oos.writeObject(cad);
InfoRetorno retorno = (InfoRetorno) ois.readObject();
if (retorno.getCodRetorno() == InfoRetorno.SUCESSO) {
jTextField2.setText("");
acaoListaPassageiros();
}
escreveLog(retorno.getMensagem());
} else {
escreveLog("Nenhum nome para o passageiro!");
}
} else {
escreveLog("Vôo não reconhecido!");
}
} catch (Exception e) {
e.printStackTrace();
escreveLog("Erro ao cadastrar passageiro");
}
}
Objetos:
public class ObVoo implements Serializable{
private static int ID = 0;
public static int getNovoID() {
return ID++;
}
public static final int TIPO_707 = 707;
public static final int TIPO_727 = 727;
public static final int TIPO_737 = 737;
private int id;
private int tipoAviao;
private float precoPassagem;
private int capacidade;
private VectorSerial passageiros;
public class ObPassageiro implements Serializable{
private Integer id;
private String nome;
Já agradeço qualquer ajuda.