Deserializar

Bom dia, sou novo em java e estou apanhando muito.
Fiz um programa para gravar clientes em um txt., ele grava corretamente mas quando clico em listar os clientes(para ler os clientes gravados no txt e exibi-los na tela) o programa da erro.

[code]public class Janela extends JFrame implements ActionListener{

private JTextField campo1,campo2,campo3;
private JLabel texto1, texto2, texto3, texto4, texto5, texto6, texto7;
private JButton b1;
private JButton b2;
private JButton b3;
private JComboBox combo,combo1,combo2;
String genero[] = {"", "Masculino","Feminino"};
String EstadoCivil[]={"", "Solteiro", "Casado",
	"Divorciado", "Viuvo", "Outros" };
String contato[] = {"", "Familiar", "Amigo", "Conhecido", "Outros"};
public Janela() {
	super("Cadastro de Clientes");

	Container c = getContentPane();
	c.setLayout(new BorderLayout());

	JPanel p1 = new JPanel();
	p1.setLayout(new GridLayout(0, 2, 5, 5));
	
	JMenuBar menuBar = new JMenuBar();
	setJMenuBar(menuBar);
	JMenu jMenuArquivo = new JMenu("Arquivo");
	menuBar.add(jMenuArquivo);
	JMenuItem jMenuCadastrar = new JMenuItem("Cadastrar Clientes");
	jMenuArquivo.add(jMenuCadastrar);
	JMenuItem jMenuListar = new JMenuItem("Listar Clientes");
	jMenuArquivo.add(jMenuListar);
	
	combo = new JComboBox(genero);
	combo1 = new JComboBox(EstadoCivil);
	combo2 = new JComboBox(contato);
	
	texto1 = new JLabel("Nome:");
	campo1 = new JTextField(30);
	texto2 = new JLabel("Idade:");
	campo2 = new JTextField(30);
	texto5 = new JLabel("Contato:");
	texto6 = new JLabel("Estado Civil:");
	texto7 = new JLabel("Sexo:");
	b1 = new JButton("Novo");
	b2 = new JButton("Gravar");
	b3 = new JButton("Cancelar");
			
	
	
	p1.add(texto1);
	p1.add(campo1);
	p1.add(texto7);
	p1.add(combo);
	p1.add(texto2);
	p1.add(campo2);
	p1.add(texto5);
	p1.add(combo2);
	p1.add(texto6);
	p1.add(combo1);
	 b1.addActionListener(this);
	 b2.addActionListener(this);
	 b3.addActionListener(this);
	campo1.addActionListener(this);
	campo2.addActionListener(this);
	jMenuListar.addActionListener(this);
	jMenuCadastrar.addActionListener(this);

	c.add("North", p1);
	c.add("West", b1);
	c.add("Center", b2);
	c.add("East", b3);
	pack();
	setVisible(true);}
@Override
public void actionPerformed(ActionEvent evento) {
	if ((evento.getSource() == b1)){
		campo1.setText("");
		campo2.setText("");
		combo.setSelectedItem("");
		combo1.setSelectedItem("");
		combo2.setSelectedItem("");
	}
	
	if ((evento.getSource() == b2)){
		try{
			File arquivo = new File("C:\\Users\\HOME\\Desktop\\banco.txt");
			FileOutputStream fOut = new FileOutputStream(arquivo);
			ObjectOutputStream objOut = new ObjectOutputStream(fOut);
			
		ArrayList<cliente> c = new ArrayList<cliente>();

		String nome = campo1.getText();
		String sexo = combo.getSelectedItem().toString();
		int idade = Integer.parseInt(campo2.getText());
		String contato = combo2.getSelectedItem().toString();
		String estadocivil = combo1.getSelectedItem().toString();
		
		
			cliente c1 = new cliente();
			c1.setNome(nome);
			c1.setSexo(sexo);
			c1.setIdade(idade);
			c1.setContatos(contato);
			c1.setEstadocivil(estadocivil);
			c.add(c1);

			
		for (int i = 0; i < c.size(); i++) {
			
			objOut.writeObject(c.get(i).mostraCliente()+System.getProperty ("line.separator"));
		}
		objOut.close();
		fOut.close();
		
		
		
		}
		
		catch(Exception e){
			System.out.println("Erro");			
		

		}



	}

	
	if ((evento.getSource() == b3)){
		System.exit(0);
	}
	
	if ("Cadastrar Clientes".equals(evento.getActionCommand())) { 
		Janela i = new Janela();
        i.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent fecharJanela){
                System.exit(0);}});}

if (“Listar Clientes”.equals(evento.getActionCommand())) {

Deserializador d = new Deserializador();
ArrayList<cliente> c = null;
try {
	ArrayList<cliente> c1 =  (ArrayList<cliente>) d.deserializar("C:\\Users\\HOME\\Desktop\\banco.txt");

} catch (Exception ex) {
    System.err.println("Falha ao deserializar! - " + ex.toString());
}
int i = 0;
System.out.println(c.get(i).mostraCliente());




	}
}}

[/code]

Alguém poderia me ajudar??

“Da erro” é muito genérico, fica dificil ajudar assim.Imagine que você vá em um médico. Chegando lá você diz apenas “estou doente.” ? Não, você diz os sintomas e ajuda o médico a descobrir o que você tem.

Diga qual erro está dando.

dica: No seu catch, coloque para imprimir o strackTrace - e.printStrackTrace(); -

ele simplesmente não lê o arquivo txt que gravou e cai na tela de erro

“Falha ao deserializar! - java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException…”

Bom, o erro está dizendo que seu método deserializar está retornando um texto, uma String. E ali você tenta fazer um cast para ArrayList. Não é possível transformar uma String num ArrayList.

Muito provavelmente seu erro está no método deserializar, mas como você não postou a classe “Desserializador” fica difícil dizer onde. Fazendo uma analogia:

Se como no seu próprio título o problema é o “Deserializar”, você poderia ter postado o código que “Desserializa”.

[code]import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class Deserializador {

public Deserializador() {    }
 
public Object deserializar(String path) throws Exception {
FileInputStream inFile = new FileInputStream(path);
ObjectInputStream d = new ObjectInputStream(inFile);
Object o = d.readObject();
d.close();
return o;
}

}
[/code]

Como você está serializando o objeto? Poste por favor a classe que serializa e a classe que faz a chamada ao método de serialização.

[quote=ErickRAR]“Da erro” é muito genérico, fica dificil ajudar assim.Imagine que você vá em um médico. Chegando lá você diz apenas “estou doente.” ? Não, você diz os sintomas e ajuda o médico a descobrir o que você tem.

Diga qual erro está dando.

dica: No seu catch, coloque para imprimir o strackTrace - e.printStrackTrace(); -[/quote]

ahahhaah essa foi a melhor analogia que eu já vi para o caso…
vou usar esta!!
:wink: