Gostaria de saber como serializar num arquivo um objeto de uma classe A ,por exemplo essa classe A contém um atributo que é um array de objetos da classe B. O problema não é a sintaxe nem como serializar não o problem é que quando faço isso e leio do arquivo esse objeto só consigo acessar o elemento 0 do array de objetos da classe B quando vou acessar o elemento 1 e mando imprimir no JOptionPane.showMessaage só aparece o JOptionPane sem nada nele.
O Array está definido assim na Classe A:
public class Cliente extends Pessoa implements Serializable{
private int matricula,diasporSemana;
private Calendar datadeCadastro;
private int mesesPagos;
private Calendar ultimoPag;
private int diadepagamento;
private AvaFisica[] ava = new AvaFisica[20];
private static int ultimamatricula;
A classe A que falo é a classe Cliente
a Classe B é a classe AvaFisica
a classe b tambem implementa Serializable
Andy, quando for postar código fonte, use a tag code.
Quanto ao seu problema, parece que o que está acontecendo é a forma que você está inicializando o array.
Tente inicializar o array (new AvaFisica[20]) dentro do construtor da classe Cliente.
Pergunta: você está mesmo inserindo elementos no array?
Bom eu fiz um métoodo addAva(AvaFisica ava)
propositalmente adicionei 2 elementos nele deixando os outros vazio só pra efeito de teste. Quando vou puxar o objeto do arquivo e vou acessar esse atributo AvaFisica[] coloco o método getAva(int indice) e então coloco o método getIMC que é um atributo da classe AvaFisica mas antes de puchar do arquivo eu ja tenho gravado tudo nele nesse atrinuto eu guardo apenas dois elementos com valores o elemento 0 e 1 do atributo avaFisica mas só consigo acessar o zero. Vou tentar colocar no construtor como você me aconselhou.
Dê uma olhada nesse exemplo e tente encontrar o problema no seu código. Coloquei todas as classes no mesmo arquivo para simplificar.
O que eu falei sobre a inicialização do array foi besteira, estava com sono
Cliente c = new Cliente( "João", new Date() );
AvaFisica av1 = new AvaFisica( "avaliação 1" );
AvaFisica av2 = new AvaFisica( "avaliação 2" );
AvaFisica av3 = new AvaFisica( "avaliação 3" );
c.addAvaFisica( av1 );
c.addAvaFisica( av2 );
c.addAvaFisica( av3 );
ObjectOutputStream os = new ObjectOutputStream(
new FileOutputStream( FILE_NAME ) );
os.writeObject( c );
os.close();
}
public void ler() throws IOException, ClassNotFoundException {
ObjectInputStream oi = new ObjectInputStream( new FileInputStream( FILE_NAME ) );
Object o = oi.readObject();
if ( o instanceof Cliente ) {
Cliente c = ( Cliente ) o;
System.out.println( c );
}
}
}
class Pessoa implements Serializable {
private String nome;
public Pessoa( String nome ) {
this.nome = nome;
}
public String getNome() {
return nome;
}
}
class Cliente extends Pessoa implements Serializable {
private static SimpleDateFormat df = new SimpleDateFormat( "dd/MM/yyyy" );
private static final int MAX_AVA_FISICAS = 20;
private Date dataCadastro;
private AvaFisica[] avasFisicas;
private int ultimaAvaFisica;
public Cliente( String nome, Date dataCadastro ) {
super( nome );
this.dataCadastro = dataCadastro;
this.avasFisicas = new AvaFisica[MAX_AVA_FISICAS];
}
public Date getDataCadastro() {
return dataCadastro;
}
public void addAvaFisica( AvaFisica avaFisica ) {
if ( ultimaAvaFisica <= MAX_AVA_FISICAS - 1 ) {
avasFisicas[ultimaAvaFisica++] = avaFisica;
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append( getNome() ).append( " - " ).append( df.format( dataCadastro ) );
for ( AvaFisica av : avasFisicas ) {
if ( av != null ) {
sb.append( "\n" ). append( av );
}
}
return sb.toString();
}