2017-04-03 34 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