0

Muy buenas, Me podrían dar una mano con este error, necesito poder parsear la entrada (entero) desde teclado y pasarla a un objeto

/**Clase Main: **/


public class app {


    public static void main(String[] args) {

        Persona per =new Persona();
        Fecha fecha =new Fecha();

    PersonaConNacimiento persona = new PersonaConNacimiento();
    persona.inputPersonaConNacimiento(per,fecha);
    //persona.showPersonaConNacimiento();
    }

}

Clase PersonaConNacimiento:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class PersonaConNacimiento extends Persona {

    Fecha nacimiento;

    public PersonaConNacimiento() {
        super();
    }

    public void inputPersonaConNacimiento(Persona persona, Fecha fecha) {

        BufferedReader dato = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Ingrese Nombre");

        try {
            this.setNombre(dato.readLine());
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }

        System.out.println("Ingrese Apellido");

        try {
            this.setApellido(dato.readLine());
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }

        System.out.println("Ingrese dni");

        try {
            this.setDni(Integer.parseInt(dato.readLine()));
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }       
    /***************************HELP*****************************************/  
        System.out.println("Ingrese Fecha- : día, formato dd");

        try {

            this.nacimiento.setDia(Integer.parseInt(dato.readLine()));  

        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        System.out.println("Ingrese mes, formato mm");
        try {
            this.nacimiento.setMes(((Integer.parseInt(dato.readLine()))));
        } catch (IOException e) {
            System.out.println(e.getMessage());

        }
        System.out.println("Ingrese año, formato aaaa");
        try {
            this.nacimiento.setAnho((Integer.parseInt(dato.readLine())));
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }       
        /*************************FIN HELP *******************************************/
    }

    public void showPersonaConNacimiento() {
        System.out.println("la fecha es: " + this.nacimiento.getDia() + "/" 
                                           + this.nacimiento.getMes() + "/" 
                                           + this.nacimiento.getAnho());

        System.out.println("Nombre: " + this.getNombre() + "\n"
                        + " Apellido: " + this.getApellido() + "\n"
                        + "Dni: " + this.getDni());
    }

    @Override
    public String toString() {

        return "Trabaj práctico 1 enunciado 2";
    }

    public Fecha getNacimiento() {
        return nacimiento;
    }

    public void setNacimiento(Fecha nacimiento) {
        this.nacimiento = nacimiento;
    }

}

Esta es la salida con el error.

Ingrese Nombre

nombre Ingrese Apellido apellido Ingrese dni 2345 Ingrese Fecha- : día, formato dd 23 Exception in thread "main" java.lang.NullPointerException at PersonaConNacimiento.inputPersonaConNacimiento(PersonaConNacimiento.java:45) at app.main(app.java:11)

introducir la descripción de la imagen aquí

Dent007
  • 1
  • 2
  • Dent007 te invito a realizar el [tour] para conocer el funcionamiento básico del sitio. Con respecto a la realización de preguntas que estas sean bien recibidas por la comunidad y obtengas excelentes respuestas, es muy importante leer [ask], saludos! – Jorgesys Mar 30 '18 at 16:57
  • 1
    Posible duplicado de [¿Cuál es la solución a todos los errores NullPointerException presentes, pasados y futuros?](https://es.stackoverflow.com/questions/42977/cu%c3%a1l-es-la-soluci%c3%b3n-a-todos-los-errores-nullpointerexception-presentes-pasados) – Dev. Joel Mar 30 '18 at 18:49
  • SOLUCIONADO: Fecha nacimiento; Estaba usando esta declaración "Fecha nacimiento "sin haber instanciado un objeto de la misma. Problema solucionado!!! Gracias – Dent007 Mar 30 '18 at 17:53
  • La respuesta que te proporcione no soluciono tu problema? – Jorgesys Mar 30 '18 at 21:51

1 Answers1

1

El problema que genera este error:

Exception in thread "main" java.lang.NullPointerException at clasedemo.PersonaConNacimiento.inputPersonaConNacimiento()

es debido a que tratas de llamar un método en una instancia con valor null, en este caso, nacimiento tiene un valor null ya que no lo has inicializado:

this.nacimiento.setDia(Integer.parseInt(dato.readLine()));

inicializa y de esta forma podrás agregar los valores de la fecha sin problemas:

...
...
System.out.println("Ingrese Fecha- : día, formato dd");

    try {

        nacimiento = new Fecha(); //*** Crea una instancia de la clase Fecha()

        this.nacimiento.setDia(Integer.parseInt(dato.readLine()));  

    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
 ...
 ...
Jorgesys
  • 103,630
  • 13
  • 52
  • 124