Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: markiteps en 27 de Febrero 2016, 22:56

Título: problema java lang null pointer excepcion metodos de otro paquete
Publicado por: markiteps en 27 de Febrero 2016, 22:56
Buenas noches, perdonad por molestar pero ya estoy algo desesperado, no se si alguien podria echarme una mano, vereis esta clase que os muestro debe llamar a los metodos de una interfaz que esta en otro paquete diferente de blue J, pero siempre que llama a cuaquier metodo de controlador salta el error de java null pointer excepcion, creo que es por algo de no inicializar el controlador, pero tampoco se como inicializarlo

Código: [Seleccionar]

package gestorempresas.cliente;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
//import gestorempresas.empresas.InterfazControladorEmpresas;
import gestorempresas.empresas.*;
//import gestorempresas.*;
/**
 * Write a description of class ClienteGestorEmpresas here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class ClienteGestorEmpresas
{
     static InterfazControladorEmpresas controlador;//creo objeto clase interfaz
   
    /**
     * Constructor for objects of class ClienteGestorEmpresas
     */
 
     public static void main(String[] args) {
   
         
         
        ClienteGestorEmpresas miObjeto = new ClienteGestorEmpresas();
       
        String opcion="";
        String cif ="";
        String nombre ="";
        String direccion ="";
       
        Scanner in = new Scanner(System.in);
       
        List<Empresa> lista;

        do{//bucle infinito, en el switch cuando pulsemos t sale del programa
           
       
       
       
        System.out.println("Menu del cliente: ");
        System.out.println("l - listar empresas ");
        System.out.println("i - mostrar informacion detallada de una empresa");
        System.out.println("c - crear una nueva empresa");
        System.out.println("m - modificar datos de una empresa existente");
        System.out.println("b - borrar una empresa");
        System.out.println("t - terminar");
       
       
        opcion = in.next();
        switch(opcion)
        {
            case "l":
                lista = controlador.recuperarEmpresas();
               
                 

                if (!lista.isEmpty()){
                int i;
                        for(i=0;i<lista.size();i++)//recorro la lista
                        {
                            Empresa enterprise = lista.get(i); //obtengo un objeto de tipo empresa de la lista
                            System.out.println(enterprise.verDescripcionBreve());//iprimo por pantalla datos
                        }
                    }
                    else{
                    System.out.println("ERROR!!!!!!!!");
                    }
               
               
               
                        break;
            case "i":   System.out.println("Introduzca el Cif de la empresa: ");
                        cif = in.next();   
                        try {Empresa empresa = controlador.recuperarEmpresa(cif);
                            System.out.println(empresa.verDescripcionBreve());
                           
                        }catch(ExcepcionEmpresas e){
                       System.out.println("Ya existe una empresa con mismo CIF");
                       
                        }
                       
                       
                        break;
            case "c":   System.out.println("Introduzca el cif de la empresa: ");
                        cif = in.next();
                        System.out.println("Introduzca el nombre de la empresa: ");
                        nombre = in.next();
                        System.out.println("Introduzca la direccion de la empresa: ");
                        direccion = in.next();
                       
                         try { controlador.crearEmpresa(cif,nombre,direccion);
                           
                        }catch(ExcepcionEmpresas e){
                            System.out.println("Ya existe una empresa con mismo CIF");
                       
                        }
                       
                        break;
            case "m":   System.out.println("Introduzca el CRI de la empresa: ");
                        cif = in.next();
                        System.out.println("Introduzca el nombre de la empresa: ");
                        nombre = in.next();
                        System.out.println("Introduzca la direccion de la empresa: ");
                        direccion = in.next();
                       
                         try { controlador.modificarEmpresa(cif,nombre,direccion);
                           
                        }catch(ExcepcionEmpresas e){
                            System.out.println("No hay empresas que coincidan con el valor de CIF introducido");
                       
                        }
                       
                        break;
            case "b":   System.out.println("Introduzca el cif de la empresa");
                        cif = in.next();
                       
                         try { controlador.borrarEmpresa(cif);
                           
                        }catch(ExcepcionEmpresas e){
                       System.out.println("Ya existe una empresa con mismo CIF");
                       
                        }
                       
                        break;
            case "t":   System.exit(1);
                        break;
            default: System.out.println("La entrada no es correcta.");
        }
       
        }while(true);//fin del bucle while-
    }
       
     
 }
Título: Re:problema java lang null pointer excepcion metodos de otro paquete
Publicado por: Alex Rodríguez en 29 de Febrero 2016, 19:56
Hola markiteps.

static InterfazControladorEmpresas controlador; no realiza la creación de un objeto de la clase de la interfaz, sino que declara un objeto de la clase (aún no creado ni inicializado). Para crear el objeto debes crear una instancia de un tipo de dato que implemente el tipo definido por la interface.

Dado que el objeto no se ha creado, no puedes invocarlo haciendo uso de lista = controlador.recuperarEmpresas(); porque te generará un error java lang null pointer exception

Para tener claros todos los conceptos relacionados con interfaces, tipos estáticos y dinámicos, etc. es recomendable seguir el curso http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Saludos