[Resolvido]Erro NullPointerException

Boa tarde a todos,

estou fazendo um trabalho de faculdade e estou com problemas em com o código que segue.

System.out.printf("Digite o dia do nascimento:\n"); pessoa.data.setDia(ler.nextInt());
segue a funcao setDia()

public void setDia(int dia) { this.dia = dia; }
quando chega nessa parte do codigo acontece um erro,[color=red] Exception in thread “main” java.lang.NullPointerException[/color].

Sou iniciante em java, e não consigo descobrir porque esta acontecendo este erro.

desde já obrigado.

instanciou o objeto Pessoa?

Pessoa pessoa = new Pessoa();

Pelo que entendi examinando a linha 2 pessoa.data.setDia(ler.nextInt());

Você criou duas classes: Pessoa e Data.
No entanto, você criou uma instância de Data dentro de Pessoa, ou seja, o objeto data passou a ser um atributo de pessoa.

Se isso estiver certo, verifique se dentro da classe Pessoa esse objeto da Classe Data está instanciado.
Exemplo:
Classe Data:

    public void setDia(int dia) {//metodo para inserir dia
        this.data = dia
    }

Classe Pessoa:

   
    Data data=new Data();//atributo deve estar instanciado para receber o pessoa.data.setDia(ler.nextInt());  

Espero que isso o ajude.

O NullPointerException ocorre quando você tenta invocar um metodo ou um atributo de uma variavel de referencia que esteja apontando para null.

Por exemplo:

String a = null; if(a.equals("")) { //sei la o que acontece aqui }

Aqui você estaria comparando um objeto nulo com uma String “”. Aqui ele vai lançar uma NullPointerException pois a variavel a esta apontando para null.

Se fosse assim:

String a = null; if("".equals(a)) { //use a sua criatividade }

Estaria tudo bem porque “” não é nulo e ali voce esta invocando o metodo equals de equals de “” e não de a.

E mais uma coisa, NullPointerException é uma exceção e não um erro.

[quote=Jemerson]Pelo que entendi examinando a linha 2 pessoa.data.setDia(ler.nextInt());

Você criou duas classes: Pessoa e Data.
No entanto, você criou uma instância de Data dentro de Pessoa, ou seja, o objeto data passou a ser um atributo de pessoa.

Se isso estiver certo, verifique se dentro da classe Pessoa esse objeto da Classe Data está instanciado.
Exemplo:
Classe Data:

    public void setDia(int dia) {//metodo para inserir dia
        this.data = dia
    }

Classe Pessoa:

   
    Data data=new Data();//atributo deve estar instanciado para receber o pessoa.data.setDia(ler.nextInt());  

Espero que isso o ajude.[/quote]

obrigado a todos pelas respostas,
erra exatamente este o problema, acabei nao instanciando o objeto Data corretamente, tinha colocado apenas:

public Data data;
quando deveria ter colocado

public Data data = new Data();
erro banal mas realmente nao me passou pela cabeca que poderia ser isso.