Java-Can';无法从静态对象获取属性

Java-Can';无法从静态对象获取属性,java,arraylist,nullpointerexception,static,Java,Arraylist,Nullpointerexception,Static,我正在用Java做一个MVC GUI项目。我有一个3帧和3个控制器,每个视图1个。问题是我可以创建Person对象,但当我想从存储它们的静态ArrayList获取它们的值时,会向我发送一个NullPointerException。但是ArrayList不是空的,因为我已经用测试用例保证了这一点 public class ControladorFormulario { public static PoolPersonas poolPersonas = new PoolPersonas();

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

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());


    }
}
获取具有字符串的人员的方法是下一个:

public Persona obtenerPersona(String dni) {
    Persona personaObtenida = null;
    for (Persona persona : getPoolPersonas()) {
        if (persona.getDni() == dni) {
            personaObtenida = persona;
        }
    }
    return personaObtenida;
}
因此,当我按下调用activivarvistaeditar函数的按钮时,它会以某种方式返回一个空值,而不是我试图访问的人


我已经检查了是否已向函数传递了正确的字符串和帧,并且值是正确的。我只是不明白为什么我不能在这个地方访问poolPersonas对象中的persons,而我可以在其他地方访问它。

是的,就像Zoron说的,或者意思是:你用
equals()
来比较字符串,而不是
=

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

由于您正在比较对象引用而不是它们的值,
if
语句的计算结果将始终为false。

可能的重复项看起来您可能从未向PoolPersonas添加过任何角色-PoolPersonas为空。在本例中,obtenerPersonas将返回null(假设PoolPersonas不为null)。请尝试将
if(persona.getDni()==dni){
替换为
if(persona.getDni().equals(dni)){
这是比较的问题,谢谢大家:)非常感谢,这是我的失败。我很高兴能像Python一样考虑比较它们。