2017-04-03 35 views
0

我正在用Java做一个MVC GUI项目。我有3个框架和3个控制器,每个视图1个。问题是我可以创建Person对象,但是当我想从存储的静态ArrayList中获取它们的值时,会发送一个NullPointerException。但是ArrayList不是空的,因为TestCases我已经保证了这一点。Java - 无法从静态对象获取属性

public class ControladorFormulario { 
    public static PoolPersonas poolPersonas = new PoolPersonas(); 
    public static Persona persona = new Persona(); 

    public static void activarVistaEditar(String dni, Formulario frame) { 
     if (dni == null) { 
      return; 
     } 
     frame.getTxtDni().setText(dni); 
     frame.getTxtDni().setEnabled(false); 
     Persona persona = poolPersonas.obtenerPersona(dni); 
     frame.getTxtNombre().setText(persona.getNombre()); 


    } 
} 

和与String获取人的方法是下一个:

public Persona obtenerPersona(String dni) { 
    Persona personaObtenida = null; 
    for (Persona persona : getPoolPersonas()) { 
     if (persona.getDni() == dni) { 
      personaObtenida = persona; 
     } 
    } 
    return personaObtenida; 
} 

所以,当我按下调用activarVistaEditar功能按钮,它在某种程度上返回我Null值,而不是我想要访问的人。

我已经检查过我已经将正确的字符串和框架传递给函数,并且值是正确的。我只是不明白为什么我无法访问这个地方的PoolPersonas Object中的人,我可以在另一个地方做到这一点。

+1

可能的重复[如何比较Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Zircon

+0

它看起来像你可能有从未将任何角色添加到PoolPersonas - PoolPersonas为空。在这种情况下,obtenerPersonas将返回null(假设PoolPersonas不为null)。 – HedonicHedgehog

+0

尝试更换if(persona.getDni()== dni){'with'if(persona.getDni()。equals(dni)){' –

回答

0

是像锆石说,或意味着:你有没有equals()==

if (persona.getDni().equals(dni)) 

既然你是比较对象引用,而不是他们的价值观的if语句将始终评估为false比较字符串。

+0

非常感谢你,那是我的失败。正在考虑将它们比作Python,我的荣幸。 – Baltimer