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.
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:
publicvoidsetDia(intdia){//metodo para inserir diathis.data=dia}
Classe Pessoa:
Datadata=newData();//atributo deve estar instanciado para receber o pessoa.data.setDia(ler.nextInt());
Espero que isso o ajude.
S
Sem_Nome
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.
Douglas_Ferrari
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:
publicvoidsetDia(intdia){//metodo para inserir diathis.data=dia}
Classe Pessoa:
Datadata=newData();//atributo deve estar instanciado para receber o pessoa.data.setDia(ler.nextInt());
Espero que isso o ajude.
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.