Dificuldade em serializar

Pessoal,

os códigos abaixo são referentes a um simulador de uma Biblioteca. Preciso serializá-la, mas não estou conseguindo. Em anexo, segue um diagrama “porco” que dá uma noção da estruturação do programa.

CLASSE AGENTE

public class Agente 
{
	
	private int codigo;
	
	public Agente(int codigo)
	{
		setCodigo(codigo);
	}

	public int getCodigo() 
	{
		return codigo;
	}

	public void setCodigo(int codigo) 
	{
		this.codigo = codigo;
	}
	
	public String toString()
	{
		return "Código: " + codigo;
	}
}

CLASSE ARTIGO

import java.util.ArrayList;
import java.util.List;

public class Artigo extends Publicacao
{
	
	private List<String> palavrasChave;
	private List<Autor> autores;
	
	public Artigo(int codigo, String titulo, String editor, String data, ArrayList<String> palavrasChave)
	{
		super(codigo, titulo, editor, data);
		setPalavrasChave(palavrasChave);
		autores = new ArrayList<Autor>();
	}

	public List<String> getPalavrasChave() 
	{
		return palavrasChave;
	}

	public void setPalavrasChave(ArrayList<String> palavrasChave) 
	{
		this.palavrasChave = palavrasChave;
	}
	
	public void setAutores(ArrayList<Autor> autores)
	{
		this.autores = autores;
	}
	
	public List<Autor> getAutores()
	{
		return autores;
	}
	
	public void addAutor(Autor autor)
	{
		autores.add(autor);
	}

}

CLASSE ASSUNTO

public class Assunto
{

	private String codigo, assunto;

	public Assunto(String codigo, String assunto)
	{
		setCodigo(codigo);
		setAssunto(assunto);
	}
	
	public String getAssunto() 
	{
		return assunto;
	}

	public void setAssunto(String assunto) 
	{
		this.assunto = assunto.trim();
	}

	public String getCodigo() 
	{
		return codigo;
	}

	public void setCodigo(String codigo) 
	{
		this.codigo = codigo.trim();
	}
	
	public String toString() {
		return "Código: " + codigo + "\nAssunto: " + assunto;
	}
	
	
	
}

CLASSE AUTOR

public class Autor extends Agente {
	
	private String nome, sobrenome;
	
	public Autor(int codigo, String nome, String sobrenome)
	{
		super(codigo);
		setNome(nome);
		setSobrenome(sobrenome);
	}

	public String getNome() 
	{
		return nome;
	}

	public void setNome(String nome) 
	{
		this.nome = nome.trim();
	}

	public String getSobrenome() 
	{
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) 
	{
		this.sobrenome = sobrenome.trim();
	}
	
	public String toString()
	{
		return "Nome: " + nome + " " + sobrenome + "\n" + super.toString();
	}

}

CLASSE BIBLIO

import java.util.ArrayList;

public class Biblio implements Biblioteca
{
	private RepositorioDados repositorio;

	public Biblio()
	{
		repositorio = new RepositorioDados();
	}
	
	public void addAutor(Autor autor)
	{
		repositorio.addAutor(autor);
	}
	
	public void addEditor(Editor editor)
	{
		repositorio.addEditor(editor);
	}
	
	public Autor findAutor(int codigo)
	{
		return repositorio.findAutor(codigo);
	}
	
	public Editor findEditor(int codigo)
	{
		return repositorio.findEditor(codigo);
	}
	
	public void addPub(Publicacao publicacao)
	{
		repositorio.addPub(publicacao);
	}
	
	public void removePub(String titulo)
	{
		repositorio.removePub(titulo);
	}
	
	public void removeAgente(int codigo)
	{
		repositorio.removeAgente(codigo);
	}
	
	public Publicacao findPub(int codigo)
	{
		return repositorio.findPub(codigo);
	}
	
	public ArrayList<Publicacao> findPubs(String busca)
	{
		return repositorio.findPubs(busca);
	}
}

INTERFACE BIBLIOTECA

import java.util.List;

public interface Biblioteca 
{

	public void addAutor(Autor autor);
	public void addEditor(Editor editor);
	public Autor findAutor(int codigo);
	public Editor findEditor(int codigo);
	public void addPub(Publicacao publicacao);
	public void removePub(String titulo);
	public void removeAgente(int codigo);
	public Publicacao findPub(int codigo);
	public List<Publicacao> findPubs(String busca);
	
}

CLASSE EDITOR

public class Editor extends Agente
{

	private String nome;
	
	public Editor(int codigo, String nome)
	{
		super(codigo);
		setNome(nome);
	}

	public String getNome() 
	{
		return nome;
	}

	public void setNome(String nome) 
	{
		this.nome = nome.trim();
	}
	
	public String toString()
	{
		return "Nome: " + nome + "\n" + super.toString();
	}
	
}

CLASSE LIVRO

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Livro extends Publicacao
{

	private List<Autor> autores;
	private Assunto assunto;
	
	public Livro(int codigo, String titulo, String editor, String data, Assunto assunto)
	{
		super(codigo, titulo, editor, data);
		this.assunto = assunto;
		autores = new ArrayList<Autor>();
	}
	
	public void setAutores(ArrayList<Autor> autores)
	{
		this.autores = autores;
	}
	
	public List<Autor> getAutores()
	{
		return autores;
	}
	
	public void addAutor(Autor autor)
	{
		autores.add(autor);
	}

	public Assunto getAssunto() 
	{
		return assunto;
	}

	public void setAssunto(Assunto assunto) 
	{
		this.assunto = assunto;
	}
	
	public String toString()
	{
		String string = super.toString() + "\n" + assunto.toString();
		for(Iterator<Autor> iterador = autores.iterator(); iterador.hasNext();)
		{
			string += "\n" + iterador.next().toString();
		}
		return string;
	}
	
	
}

CLASSE PUBLICAÇÃO

public class Publicacao
{
	
	private int codigo;
	private String titulo, editor, data;
	
	public Publicacao(int codigo, String titulo, String editor, String data)
	{
		setCodigo(codigo);
		setTitulo(titulo);
		setEditor(editor);
		setData(data);
	}
	
	public int getCodigo() 
	{
		return codigo;
	}
	
	public void setCodigo(int codigo) 
	{
		this.codigo = codigo;
	}
	
	public String getData() 
	{
		return data;
	}
	
	public void setData(String data) 
	{
		this.data = data.trim();
	}
	
	public String getEditor() 
	{
		return editor;
	}
	
	public void setEditor(String editor) 
	{
		this.editor = editor.trim();
	}
	
	public String getTitulo() 
	{
		return titulo;
	}
	
	public void setTitulo(String titulo) 
	{
		this.titulo = titulo.trim();
	}
	
	public String toString() {
		return "Título: " + titulo + "\nCódigo: " + codigo +
			   "\nEditor: " + editor + "\nData: " + data;
	}

}

CLASSE REPOSITÓRIO DE DADOS

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;

public class RepositorioDados 
{

	private Map<String, Assunto> assuntos;
	private Set<Agente> agentes;
	private List<Publicacao> pubs;
	
	public RepositorioDados()
	{
		assuntos = new HashMap<String, Assunto>();
		agentes = new HashSet<Agente>();
		pubs = new ArrayList<Publicacao>();
		initAssuntos();
	}
	
	public void addAutor(Autor autor)
	{
		agentes.add(autor);
	}
	
	public void addEditor(Editor editor)
	{
		agentes.add(editor);
	}
	
	public Autor findAutor(int codigo)
	{
		for(Iterator<Agente> iterador = agentes.iterator(); iterador.hasNext();)
		{
			Agente agente = iterador.next();
			if((agente instanceof Autor) && (agente.getCodigo() == codigo))
			{
				return (Autor)agente;
			}
		}
		return null;
	}
	
	public Editor findEditor(int codigo)
	{
		for(Iterator<Agente> iterador = agentes.iterator(); iterador.hasNext();)
		{
			Agente agente = iterador.next();
			if((agente instanceof Editor) && (agente.getCodigo() == codigo))
			{
				return (Editor)agente;
			}
		}
		return null;
	}
	
	public void addPub(Publicacao publicacao)
	{
		pubs.add(publicacao);
	}
	
	public void removePub(String titulo)
	{
		for(Iterator<Publicacao> iterador = pubs.iterator(); iterador.hasNext();)
		{
			Publicacao publicacao = iterador.next();
			if(titulo.equals(publicacao.getTitulo()))
			{
				pubs.remove(publicacao);
				break;
			}
		}
	}
	
	public void removeAgente(int codigo)
	{
		for(Iterator<Agente> iterador = agentes.iterator(); iterador.hasNext();)
		{
			Agente agente = iterador.next();
			if(agente.getCodigo() == codigo)
			{
				agentes.remove(agente);
				break;
			}
		}
	}
	
	public Publicacao findPub(int codigo)
	{
		for(Iterator<Publicacao> iterador = pubs.iterator(); iterador.hasNext();)
		{
			Publicacao publicacao = iterador.next();
			if(publicacao.getCodigo() == codigo)
			{
				return publicacao;
			}
		}
		return null;
	}
	
	public ArrayList<Publicacao> findPubs(String busca)
	{
		busca = busca.toLowerCase();
		ArrayList<Publicacao> result = new ArrayList<Publicacao>();
		for(Iterator<Publicacao> iterador = pubs.iterator(); iterador.hasNext();) 
		{
			Publicacao publicacao = iterador.next();
			if((publicacao.getTitulo().toLowerCase().contains(busca)) || (publicacao.getEditor().toLowerCase().contains(busca)) || (Integer.parseInt(busca) ==  publicacao.getCodigo()))
			{
				result.add(publicacao);
			}
		}
		return result;
	}
	
	private void initAssuntos()
	{
		assuntos.put("000", new Assunto("000","Generalidades"));
		assuntos.put("100", new Assunto("100", "Filosofia"));
		assuntos.put("200", new Assunto("200", "Religião"));
		assuntos.put("300", new Assunto("300", "Ciências Sociais"));
		assuntos.put("400", new Assunto("400", "Línguas"));
		assuntos.put("500", new Assunto("500", "Ciências Naturais"));
		assuntos.put("600", new Assunto("600", "Ciências Aplicadas"));
		assuntos.put("700", new Assunto("700", "Artes"));
		assuntos.put("800", new Assunto("800", "Literatura"));
	}
	
}

CLASSE REVISTA

import java.util.ArrayList;
import java.util.List;

public class Revista extends Publicacao
{

	private List<Artigo> artigos;
	
	public Revista(int codigo, String titulo, String editor, String data)
	{
		super(codigo, titulo, editor, data);
		artigos = new ArrayList<Artigo>();
	}

	public List<Artigo> getArtigos()
	{
		return artigos;
	}

	public void setArtigos(ArrayList<Artigo> artigos)
	{
		this.artigos = artigos;
	}
	
	public void addArtigo(Artigo artigo)
	{
		artigos.add(artigo);
	}	
	
}

Quem tiver paciência para ajudar-me ficaria muito grato, pois estou tentando há dias e não consigo.

[ ]


Mas qual classe vc quer serializar? Todas?

Dá uma olhada no exemplo…

[code]
import java.io.*;

public class Pessoa implements Serializable {

/** Creates a new instance of Pessoa */
public Pessoa() {
    this( "Vazio", "Vazio", 0 );
}

public Pessoa( String n, String sn, int i ) {
    setNome( n );
    setSobreNome( sn );
    setIdade( i );
}

public void setNome( String n ) {
    nome = n;
}

public void setSobreNome( String sn ) {
    sobreNome = sn;
}

public void setIdade( int i ) {
    idade = i;
}

public String getNome() {
    return nome;
}

public String getSobreNome() {
    return sobreNome;
}

public int getIdade() {
    return idade;
}

private String nome;
private String sobreNome;
private int idade;

}[/code]

[code]
// métodos de uma classe de interface gráfica que obtém os dados da Pessoa

// serializando
private void btnSerializarActionPerformed(java.awt.event.ActionEvent evt) {

    try {
        
        int i = Integer.parseInt( fieldIdade.getText() );
        
        // cria um novo objeto Pessoa
        Pessoa p = new Pessoa( fieldNome.getText(), 
                fieldSobreNome.getText(), i );
        
        JFileChooser fc = new JFileChooser();
        
        int op = fc.showSaveDialog( this );
        
        if ( op == JFileChooser.APPROVE_OPTION ) {
            
            File arquivo = fc.getSelectedFile();
            
            if ( arquivo == null || arquivo.getName().equals("") ) {
                JOptionPane.showMessageDialog( this, "Erro no arquivo", 
                        "Erro", JOptionPane.ERROR_MESSAGE );
            } else {
                
                try {
				
                    // cria stream de objeto
                    ObjectOutputStream saida = new ObjectOutputStream( 
                            new FileOutputStream( arquivo ) );

                    // escreve o objeto p do tipo Pessoa no arquivo
                    saida.writeObject( p );

                    // fecha o stream
                    saida.close();

                } catch ( IOException exc ) {

                    JOptionPane.showMessageDialog( this, "Erro no arquivo", 
                        "Erro", JOptionPane.ERROR_MESSAGE );

                }
                
            }
            
        }
        
    } catch ( NumberFormatException exc ) {
        JOptionPane.showMessageDialog( this, "Idade incorreta", "Erro",
                JOptionPane.ERROR_MESSAGE );
    }
    
} 

// deserializando
private void btnDeserializarActionPerformed(java.awt.event.ActionEvent evt) {

    try {

        JFileChooser fc = new JFileChooser();
        
        int op = fc.showOpenDialog( this );
        
        if ( op == JFileChooser.APPROVE_OPTION ) {
            
            File arquivo = fc.getSelectedFile();
            
            if ( arquivo == null || arquivo.getName().equals("") ) {
                JOptionPane.showMessageDialog( this, "Erro no arquivo", 
                        "Erro", JOptionPane.ERROR_MESSAGE );
            } else {
                
                try {
				
                    // cria stream de objeto
                    ObjectInputStream entrada = new ObjectInputStream( 
                            new FileInputStream( arquivo ) );

                    // lê o objeto p do tipo Pessoa no arquivo
                    Pessoa p = ( Pessoa ) entrada.readObject();
                    
                    // preenche os campos
                    
                    fieldNome.setText( p.getNome() );
                    fieldSobreNome.setText( p.getSobreNome() );
                    fieldIdade.setText( p.getIdade() + "" );

                    // fecha o stream
                    entrada.close();

                } catch ( IOException exc ) {

                    JOptionPane.showMessageDialog( this, "Erro no arquivo", 
                        "Erro", JOptionPane.ERROR_MESSAGE );

                } catch ( ClassNotFoundException exc ) {

                    JOptionPane.showMessageDialog( this, "Classe não encontrada", 
                        "Erro", JOptionPane.ERROR_MESSAGE );

                }
                
            }
            
        }
        
    } catch ( NumberFormatException exc ) {
        JOptionPane.showMessageDialog( this, "Idade incorreta", "Erro",
                JOptionPane.ERROR_MESSAGE );
    }
    
} [/code]

Esqueci de dizer. É pra serializar a classe BIBLIOTECA.

Valeu pela ajuda!

alguém mais? :shock: