Problemas ContatoDAO[RESOLVIDO"]

Bom dia pessoal, preciso da ajuda de voces,
estou entrando no mundo da programação agora, e escolhi a linguagem java, porem estou com alguns problemas nos meus testes, eu tenho uma classe contato, uma classe endereco, no banco mysql eu tenho a tabela TBTB_CONTATO e TB_TB_ENDERECO, la eu armazeno o contato e seu respectivo endereco, funciona legal, porem na hora de pesquisar um contato vem o problema, tenho uma pagina jsp onde eu digitaria a matricula do contato, e a action iria redirecionar para outra pagina jsp onde mostraria os dados do contato, qual o problema, quando eu pesquiso somente pelo contato, sem buscar seu endereco, funciona normal, retorna os dados do contato, mas eu quero uma pesquisa completa, quando eu coloco no dao para retornar tb o endereco do respectivo contato da um erro null point exception, o que poderia ser?

abaixo segue minhas classes:

SelecionaContatoAction:

public class SelecionaContatoAction {
	private int matricula;
	private Contato contato;
	
	@Action(value="selecionaContato", results= {
			@Result(name="ok", location="/contatoSelecionado.jsp")
	})
	
	public String execute() {
		contato = new ContatoDAO().getContatoMatricula(matricula);
		return "ok";
	}
	
	public void setMatricula(int matricula) {
		this.matricula = matricula;
	}

	public Contato getContato() {
		return contato;
	}
}

ContatoDAO:

public ContatoDAO() {
		try {
			connection = new ConnectionFactory().getConnection();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	public Contato getContatoMatricula(int matricula) {
		try {
		PreparedStatement stmt;
		
		stmt = connection.prepareStatement("select c.*, e.* from TB_TB_CONTATO c INNER JOIN TB_TB_ENDERECO e WHERE c.MATRICULA =? AND c.ID_CLIENTE = e.ID_CLIENTE");
		stmt.setInt(1, matricula);
		
		ResultSet rs = stmt.executeQuery();
		
		if(rs.next()) {
			return populaContato(rs);
		}

		rs.close();
		stmt.close();

		return null;
		} catch (SQLException e) {
			throw new RuntimeException(e);
			}
		}
	private Contato populaContato(ResultSet rs) throws SQLException {
		Contato contato = new Contato();
		
			contato.setMatricula(rs.getInt("MATRICULA"));
			contato.setNomecompleto(rs.getString("NOMECOMPLETO"));
			contato.setDt_nascimento(rs.getString("DT_NASCIMENTO"));
			contato.setIdentidade(rs.getString("IDENTIDADE"));
			contato.setOrgaoexpedidor(rs.getString("ORGAOEXPEDIDOR"));
			contato.setCpf(rs.getString("CPF"));
			contato.setTituloeleitoral(rs.getString("TITULOELEITORAL"));
			contato.setCelular(rs.getString("CELULAR"));
			contato.setTelefone(rs.getString("TELEFONE"));
			contato.setEmail(rs.getString("EMAIL"));
			//contato.getEndereco().setNumero(rs.getString("e.NUMERO"));
			//contato.getEndereco().setRua(rs.getString("e.RUA"));
			//contato.getEndereco().setBairro(rs.getString("e.BAIRRO"));
			//contato.getEndereco().setCep(rs.getString("e.CEP"));
			//contato.getEndereco().setCidade(rs.getString("e.CIDADE"));
			//contato.getEndereco().setEstado(rs.getString("e.ESTADO"));
			//contato.getEndereco().setComplemento(rs.getString("e.COMPLEMENTO"));
			return contato;
	}

Contato.class:

public class Contato {
	private int id_contato;
	private int matricula;
	private String nomecompleto;
	private String dt_nascimento;
	private String identidade;
	private String orgaoexpedidor;
	private String cpf;
	private String tituloeleitoral;
	private String celular;
	private String telefone;
	private String email;
	private Endereco endereco;

Endereco.class:

public class Endereco {
	private int id_endereco;
	private String numero;
	private String rua;
	private String bairro;
	private String cep;
	private String cidade;
	private String estado;
	private String complemento;

espero ter explicado corretamente, agradeço a todos desde já.

O NullPointer ocorre porque quando vc vai popular os dados de Endereco , ainda não existe nenhuma referencia para o objeto, dentro de Contato.

Na sua classe, ContatoDAO

no loop que vc popula os campos, faça o seguinte:

contato.setEndereco(new Endereco());

Espero ter ajudado, abraço!

onde eh que ocorre seu null pointer?
coisas a considerar: no seu select, vc faz um inner join, eh esse mesmo o tipo de relacionamento que vc tem? ou vc pode ter um contato sem endereco? se for esse o caso, vc deveria usar um left outer join
onde eh que seu endereco eh inicializado?

Onde que dá a exceção?

Mas pelo o que eu vi, no método populaContato vc tem que criar o endereço antes de popular.

private Contato populaContato(ResultSet rs) throws SQLException {
	Contato contato = new Contato();

	contato.setMatricula(rs.getInt("MATRICULA"));
	contato.setNomecompleto(rs.getString("NOMECOMPLETO"));
	contato.setDt_nascimento(rs.getString("DT_NASCIMENTO"));
	contato.setIdentidade(rs.getString("IDENTIDADE"));
	contato.setOrgaoexpedidor(rs.getString("ORGAOEXPEDIDOR"));
	contato.setCpf(rs.getString("CPF"));
	contato.setTituloeleitoral(rs.getString("TITULOELEITORAL"));
	contato.setCelular(rs.getString("CELULAR"));
	contato.setTelefone(rs.getString("TELEFONE"));
	contato.setEmail(rs.getString("EMAIL"));
	contato.setEndereco( new Endereco() ); // <-- Cria o endereço antes senão os getEndereco() abaixo retornam null.
	contato.getEndereco().setNumero(rs.getString("e.NUMERO"));
	contato.getEndereco().setRua(rs.getString("e.RUA"));
	contato.getEndereco().setBairro(rs.getString("e.BAIRRO"));
	contato.getEndereco().setCep(rs.getString("e.CEP"));
	contato.getEndereco().setCidade(rs.getString("e.CIDADE"));
	contato.getEndereco().setEstado(rs.getString("e.ESTADO"));
	contato.getEndereco().setComplemento(rs.getString("e.COMPLEMENTO"));

	return contato;
}

Amigos, funcionou, faltou eu instanciar a classe endereco,
muito obrigado a todos.