Deserializar

6 respostas
J

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.

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());


	
    
		}
	}}

Alguém poderia me ajudar??

6 Respostas

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(); -

J

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…”

ViniGodoy

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”.

J
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;
    }
}
ViniGodoy

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.

D

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(); -

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

Criado 27 de junho de 2014
Ultima resposta 27 de jun. de 2014
Respostas 6
Participantes 4