Serialização de Objetos

13 respostas
Giliard_Lourenco1

Por gentileza, alguem poderia me ajudar?
Estou tentando fazer a serialização desses objetos mas não esta dando certo. Algem podeia apontar onde estou errando?
O objeto “gravaArquivo” já está serializado em uma inner class.
Fico no aguardo.
Obrigado

private void botaoSalvarConfiguracaoActionPerformed(java.awt.event.ActionEvent evt) {                                                        

    gravaArquivo = new GravaConfiguracaoDoBanco();

    gravaArquivo.banco = (String) listaDeBancos.getSelectedItem();
    gravaArquivo.driver = driverText.getText();
    gravaArquivo.url = urlText.getText();
    gravaArquivo.usuario = usuarioText.getText();
    gravaArquivo.senha = senhaDoBanco.getText();
    try {

        salvaArquivo = new ObjectOutputStream(new FileOutputStream(System.getProperty("user.dir") +
                File.separator + "Banco.conf"));
        salvaArquivo.writeObject(gravaArquivo);
        salvaArquivo.close();

        JOptionPane.showMessageDialog(null, "Configurações gravadas com sucesso.", "Gravação das Configurações" +
                " do Banco de Dados.", JOptionPane.INFORMATION_MESSAGE);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Não foi possível gerar o arquivo de configurações. \n" +
                "Contacte o responsável pelo sistema.", "Erro na gravação das Configurações" +
                " do Banco de Dados.", JOptionPane.ERROR_MESSAGE);
    }
}

13 Respostas

GraveDigger

Coloca o erro que vc está obtendo tb

Giliard_Lourenco1

Segue a mensagem.

javax.swing.GroupLayout

Giliard_Lourenco1

Segue a outra mensagem.

java.io.NotSerializableException: javax.swing.GroupLayout

GraveDigger

poste a classe GravaConfiguracaoDoBanco tb.

Ao que me parece, vc está usando um componente visual para armazenar esses dados.

Se for esse o caso, use um objeto java comum(POJO) para armazenar esses dados ao invés de um componente visual.

ignacio83

javax.swing.GroupLayout Essa classe não implementa a interface Serializable, portanto não pode ser serializada.

hitcurst

Mas porque está serializando o GroupLayout ??
Ali você está gravando em arquivo o objeto da classe “GravaConfiguracaoDoBanco”

Giliard_Lourenco1

Segue a classe…

private class GravaConfiguracaoDoBanco implements Serializable {

private String banco;
    private String driver;
    private String url;
    private String usuario;
    private transient String senha;

    public String getBanco() {
        return banco;
    }

    public String getDriver() {
        return driver;
    }

    public String getUrl() {
        return url;
    }

    public String getUsuario() {
        return usuario;
    }

    public String getSenha() {
        return senha;
    }

    @Override
    public String toString() {
        return new String("Banco " + banco + "\n" +
                "Driver " + driver + "\n" +
                "URL " + url + "\n" +
                "Usuário " + usuario);
    }
}
GraveDigger

Que estranho

Sendo todos seus atributos private, como vc está acessando diretamente no código inicial que vc postou ?,

hitcurst

É, não intendi.

Você está serializando aqui

salvaArquivo.writeObject(gravaArquivo);

onde gravaArquivo é uma instancia de GravaConfiguracaoDoBanco
ou seja, não tem nada haver o erro em “GroupLayout”.

Outra coisa, como o Grave falou, como voce acessa os atributos da classe diretamente ?

gravaArquivo.url = urlText.getText();

sendo que seus atributos são privados ??

Posta seu código todo ai…
Ou tenta modificar algo…tipo assim

import java.io.ObjectOutputStream;
import java.io.FileOutputStream;
import java.io.Serializable;

public class Serializando {
	
    public static void main(String[] args) throws Exception 
    {
        ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream ("C:\\teste.bin"));
        MeuObjeto obj = new MeuObjeto();
        obj.setNome("João");
        obj.setSobrenome("Houley");
        oos.writeObject(obj);
        oos.close();
    }
}

class MeuObjeto implements Serializable {

	private static final long serialVersionUID = -6034939869653161049L;
	
	private String nome;
    private String sobrenome;
    
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getSobrenome() {
		return sobrenome;
	}
	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}
}
luancorumba

Também estou com problemas na leitura de um objeto

<blockquote>public void Salvar(Produtos nv){

try{

os = new ObjectOutputStream(new FileOutputStream(c:/arq.ser));

os.writeObject(nv);

}catch(Exception e){e.printStackTrace();

}/<em>finally {

try{os.close();}</em>/

}
public void Ler(){

try{

ObjectInputStream os = new ObjectInputStream(new FileInputStream(c:/arq.ser));

System.out.println(funfou0);

while (true/<em>os.available()!=0</em>/){

Produtos p = (Produtos) os.readObject();

if (p==null) break;

model.addElement(p.nome);

System.out.println(funfou1);

}

<a href="//os.close">//os.close</a>();

}catch(EOFException e){

return;

}catch(Exception ex){

ex.printStackTrace();

}

}</blockquote>

o erro ocorre no momento model.addElement(p.nome);, pois p = null
já fiz vários testes e ainda não consegui identificar onde errei

Giliard_Lourenco1

Então, como a classe que serializa é uma inner class eu consigo acessar os atributos normalmente.
Mas vou testar as dicas que me passaram aqui.vou tentar ver se dá certo, porque eu acho isso muito estranho.

Giliard_Lourenco1

Então pessoal, eu consegui fazer com que ele gravasse corretamente o arquivo, da seguinte forma:

private void botaoSalvarConfiguracaoActionPerformed(java.awt.event.ActionEvent evt) {

gravaArquivo = new GravaConfiguracaoDoBanco();

    gravaArquivo.banco = (String) listaDeBancos.getSelectedItem();
    gravaArquivo.driver = driverText.getText();
    gravaArquivo.url = urlText.getText();
    gravaArquivo.usuario = usuarioText.getText();
    gravaArquivo.senha = senhaDoBanco.getText();

    try {

        salvaArquivo = new ObjectOutputStream(new FileOutputStream(System.getProperty("user.dir") +
                File.separator + "Banco.conf"));
        salvaArquivo.writeObject(gravaArquivo.getClass());
        salvaArquivo.flush();

        JOptionPane.showMessageDialog(null, "Configurações gravadas com sucesso.", "Gravação das Configurações" +
                " do Banco de Dados.", JOptionPane.INFORMATION_MESSAGE);

    } catch (Exception e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, "Não foi possível gerar o arquivo de configurações. \n" +
                "Contacte o responsável pelo sistema.", "Erro na gravação das Configurações" +
                " do Banco de Dados.", JOptionPane.ERROR_MESSAGE);
    }
}
Giliard_Lourenco1

O problema agora é ler esse arquivo.

Ele da o seginte erro:

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

Criado 24 de abril de 2009
Ultima resposta 30 de abr. de 2009
Respostas 13
Participantes 5