Problemas com HashMap

Oi pessoal,

estou com um probleminha no uso da classe HashMap. Eu estava fazendo este exercício de coleções e a compilação do fonte aconteceu sem problemas, porém estão ocorrendo exceções do tipo NullPointerException nos métodos adiciona e recupera da classe Estoque. Eu não entendo por quê o objeto q eu passo fica com a referência em memória com nulo. Eu vou passar o código fonte todo do exercício para que a ajuda a mim seja mais fácil.

import java.io.*;

public class Produto
{
	private String codigo;
	private String nome;
	private String quantidade;
	
	public void Produto ( )
	{
		nome = new String ( );
		codigo = new String ( );
		quantidade =  new String ( );
	} // Produto
	
	public void setNome ( String nome )
	{
		this.nome = nome;
	} // setNome
	
	public void setCodigo ( String codigo )
	{
		this.codigo = codigo;
	} // setCodigo
	
	public void setQuantidade ( String quantidade )
	{
		this.quantidade = quantidade;
	} // setQuantidade
	
	public String getNome ( )
	{
		return this.nome;
	} // getNome
	
	public String getCodigo ( )
	{
		return this.codigo;
	} // getCodigo
	
	public String getQuantidade ( )
	{
		return this.quantidade;
	} // getQuantidade 
	
	public boolean equals ( Object obj )
	{
		boolean flag = false;
		if ( obj instanceof Produto )
		{
			Produto that = ( Produto ) obj;
			flag = ( that.codigo.equalsIgnoreCase ( this.codigo ));
		} // if
		return flag;
	} // equals
	
	public int hashCode ( )
	{
		return ( codigo != null ) ? codigo.hashCode ( ) : 0;
	} // hashCode 
	
} // class

import java.util.*;

public class Estoque
{
	
	private HashMap estoque;
	
	public void Estoque ( )
	{
		estoque = new HashMap ();
	} // Estoque
	
	public void adiciona ( Produto produto ) //throws NullPointerException
	{
		if ( produto != null )
		{
			String codigo =  produto.getCodigo ( );
			Produto p = produto;
			System.out.println ( produto );
			if ( codigo != null )
			{
				//try
				//{
					estoque.put ( codigo , p ); 
				//}
				//catch ( NullPointerException np)
				//{
				//	np.printStackTrace ( );
				//}
			} // if
		} // if
	} // adiciona
	
	public Produto recupera ( String codigo ) //throws NullPointerException
	{
		Produto produto = null;
		if ( codigo != null )
		{
			if ( estoque.containsKey ( codigo ) )
			{
				produto = ( Produto ) estoque.get ( codigo );
			} // if
		} // if
		return produto;
	} // public 
	
} // class

public class TesteEstoqueProdutos
{
	public static void main ( String sharp [ ] )
	{
		Estoque estoque = new Estoque ( );
		Produto produto = new Produto ( );
		produto.setNome ( "dinheiro" );
		produto.setCodigo ( "abo" );
		produto.setQuantidade ( "1000" );
		
		try{
		estoque.adiciona ( produto );
		} catch ( NullPointerException np){
			np.printStackTrace ( );
		}
		Produto p2 = new Produto ( );
		try{
		p2 = estoque.recupera ( "abo" ); 
		} catch ( NullPointerException np){
			np.printStackTrace ( );
		}
		System.out.println ( p2.getNome ( ) + "  " + p2.getCodigo ( ) + "  ");
	} // main
} // class

ja experimentou debuggar passo a passo ?

Eu até pensei em fazer isso, mas como eu posso debuggar passo a passo no java? Eu estou utilizando o JCreator Lite Edition, mas não encontrei opções para debbugar. Existe alguma ferramenta q me possibilite isso, ou algum recurso da JDK?

o JDK vem com um debugger, o JDB. Ou então você pode usar uma IDE livre, como netbeans e eclipse.

Valeu pela dica. Agora só falta eu aprender a utilizar o jdb, mas já estou vendo alguns tutoriais na net. Valeu msm.

 public class Estoque
 {
 	
 	private HashMap estoque;
 	
 	public void Estoque ( )
 	{
 		estoque = new HashMap ();
 	} 

Isso é um erro muito freqüente. (Não sei por quê o sr. James Gosling ou o sr. Bill Joy não viram que isso poderia acontecer - em C++ não há como isso ocorrer.)
Um construtor deve ser declarado como “public Estoque”, não como “public void Estoque”.
O correto seria:

 public class Estoque
 {
 	
 	private HashMap estoque;
 	
 	public Estoque ( )
 	{
 		estoque = new HashMap ();
 	} 

Fica com você entender por que é que estoque estava com o valor “null”.