2015-11-18 1 views
0

Я пытаюсь использовать геттер для объекта, чтобы хранить информацию об этом объекте в другом объекте. Тем не менее, просто используя getter, он немедленно возвращает исключение NullPointerException.Почему использование getter для объекта возвращает NullPointerException

Это код класса, который имеет объект как поле (и геттер):

public class NodoAnos implements Serializable 
{ 
private int ano; 
private NodoAnos proximo; 
private ListaEquipos equipos; 

public NodoAnos(int año) 
{ 
    this.ano = año; 
    this.proximo = null; 
    this.equipos = new ListaEquipos(); 
} 

public int getAno() 
{ 
    return ano; 
} 

public void setAno(int año) 
{ 
    this.ano = año; 
} 

public ListaEquipos getEquipos() 
{ 
    return equipos; 
} 

Вот все методы перед NullPointerException (исключение в примере кода 6):

Пример кода 1:

private void informacion() throws IOException, FileNotFoundException, ClassNotFoundException 
{ 
    int ano = elegirAnoPopup(); //SEE CODE SAMPLE NUMBER 2 
    NodoAnos nodAno = new NodoAnos(ano); 

    nodAno = anos.buscarAños(nodAno); //SEE CODE SAMPLE NUMBER 5 

    datosComboBoxUniversidad(nodAno); //SEE CODE SAMPLE NUMBER 6 
} 

Пример кода 2:

private int elegirAnoPopup() throws IOException, FileNotFoundException, ClassNotFoundException 
{ 
    NodoAnos aux = new NodoAnos(1); 
    List<String> choices = new ArrayList<>(); 

    anos = anos.leerArchivo(anos); //SEE CODE SAMPLE NUMBER 3 

    while(aux != null) 
    { 
     aux = anos.llenarDialogo(aux); //SEE CODE SAMPLE NUMBER 4 

     if(aux != null) 
      choices.add(Integer.toString(aux.getAno())); 
    } 

    ChoiceDialog<String> dialog = new ChoiceDialog<>("Elegir año",choices); 
    dialog.setTitle("Consultar Informacion"); 
    dialog.setHeaderText("Por favor, introduzca la informacion requerida"); 
    dialog.setContentText("Introduzca el año a consultar:"); 

    Optional<String> result = dialog.showAndWait(); 
    return Integer.parseInt(result.get()); 
} 

Пример кода 3:

public ListaAnos leerArchivo(ListaAnos anos) throws FileNotFoundException, IOException, ClassNotFoundException 
{ 
    ListaAnos lista = anos; 

    try 
    { 
     FileInputStream fis = new FileInputStream("lista.DAT"); 
     ObjectInputStream ois = new ObjectInputStream(fis); 

     if(ois != null) 
     { 
      ListaAnos objeto = (ListaAnos) ois.readObject(); 
      lista = objeto; 

      ois.close(); 
     } 
    } 
    catch(FileNotFoundException e) 
    { 
     System.out.println("No existe un archivo"); 
    } 

    return lista; 
} 

Пример кода 4:

public NodoAnos llenarDialogo(NodoAnos aux) 
{ 
    if(aux.getAno() == 1) 
     aux = cabeza; 
    else 
     aux = aux.getProximo(); 

    return aux; 
} 

Пример кода 5:

public NodoAnos buscarAños(NodoAnos nodAño) 
{ 
    NodoAnos aux = cabeza; 

    while(aux != null) 
    { 
     if(nodAño.getAno() == aux.getAno()) 
     { 
      return aux; 
     } 
     else 
     { 
      aux = aux.getProximo(); 
     } 
    } 

    return null; 
} 

Пример кода Номер 6:

private void datosComboBoxUniversidad(NodoAnos nodAno) 
{ 
    ListaEquipos listaEquipo = new ListaEquipos(); 
    NodoEquipos nodEquipo = new NodoEquipos(null, 0, 0); 

    listaEquipo = nodAno.getEquipos(); //NULLPOINTEREXCEPTION 

    while(nodEquipo != null) 
    { 
     nodEquipo = listaEquipo.buscarEquipos(nodEquipo); 

     if(nodEquipo != null) 
     { 
      comboUniversidad.getItems().add(nodEquipo.getUniversidad()); 
     } 
    } 

} 

ВАЖНОЕ ПРИМЕЧАНИЕ: nodAno не является нулевым. Уже убедился в этом. он печатается следующим образом: [email protected]

+2

Потому что 'nodAno' равно null. – Yoda

+0

Возможно, потому что nodAno имеет значение null – MadProgrammer

+0

nodAno не равно нулю. Я убедился в этом – GFV450

ответ

1

Параметр, который вы передаете в nodAno, должен иметь значение NULL. В Java вызов метода на нулевом объекте приведет к NullPointerException.

Только небольшой совет, чтобы избежать этих проблем. Если вы используете IntelliJ IDEA или аналогичную IDE, вы можете добавить аннотацию @NotNull к вашему параметру, и IDE предупредит вас, если вы передаете возможно нулевой объект в вызов метода, который требует ненулевого значения. Вы можете узнать об этом подробнее: https://www.jetbrains.com/idea/help/nullable-and-notnull-annotations.html

+0

nodAno не равно нулю. Я убедился в этом. – GFV450

+0

Измените свой вопрос, чтобы включить полную трассировку стека. С предоставленной информацией это единственное объяснение. – aeskreis

+0

Добавлен полный код до NullPointerException – GFV450