dúvida - Serializable - NullPointerException

2 respostas
deyvid
import java.io.Serializable;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;

class Collar {
	private int numCollar;
	Collar( int num ) { numCollar = num; }
	public int getNumCollar() { return numCollar; }	
}

class Dog implements Serializable {
	private int numDog;
	private transient Collar collar;
	
	Dog( int num, Collar collar ) { 
		numDog = num; 
		this.collar = collar; 
	}
	
	public int getValueCollar() { return this.collar.getNumCollar(); }
		
	public void writeObject( ObjectOutputStream os ) {
		try {
			os.defaultWriteObject();
			os.writeInt( getValueCollar() );
		} catch( Exception e ) {
			e.printStackTrace();
		}
	}
	
	public void readObject( ObjectInputStream is ) {
		try {
			is.defaultReadObject();
			this.collar = new Collar( is.readInt() );
		} catch( Exception e ) {
			e.printStackTrace();
		}
	}
}

public class Teste {
	public static void main( String ... args ) {
		Dog dog = new Dog( 20, new Collar( 10 ) );
		
		try {
			System.out.println( "collar num..:" + dog.getValueCollar() );
			
			ObjectOutputStream OS = new ObjectOutputStream( new FileOutputStream( "teste.do" ) );
			OS.writeObject( dog );
			OS.close();
			
			ObjectInputStream IS = new ObjectInputStream( new FileInputStream( "teste.do" ) );
			dog = (Dog) IS.readObject();
			IS.close();
			
			System.out.println( "collar num..:" + dog.getValueCollar() );
		} catch( Exception e ) {
			e.printStackTrace();
		}
	}
}

Por que nesta lina 60 a referencia collar aponta para NullPointerException
System.out.println( “collar num…:” + dog.getValueCollar() );

2 Respostas

S

Quando você usa “transient” você afirma que essa propriedade (objeto) não vai ser serializada. Se a classe Collar implementar Serializable e você remover o “transient” irá funcionar.

deyvid

É isso tá no livro da Kath, mas o problema é eu implementei manualmente o writeObject e readObject justamente para que dog e collar seja serializados juntos.

Esses métodos estão explacados no livro kath, que mostra como serializar o “collar” sem que o mesmo implemente Serializable.

Acho que tô fazendo algo errado e ainda não sei o que é. Alguém pode ajudar?

Criado 30 de outubro de 2009
Ultima resposta 30 de out. de 2009
Respostas 2
Participantes 2