2013-07-28 53 views
0

我不知道我在做什麼錯。它應該打印所有在特定日期訪問過的病人,但它會一直拋出空指針錯誤。它發生在我調用printPatientsOnDate方法時。在主/ UI類空指針調用方法時出現異常錯誤

public void printPatientsOnDate() throws ParseException 
{ 
    System.out.print("Enter the date(mm-dd-yyyy): "); 
    Date dt = new SimpleDateFormat("MM-dd-yyyy").parse(sc.nextLine()); 
    for(Patient i : app.getPatientsOnSpecDate(dt)) 
    { 
    System.out.println(i.getName()); 
    } 
} 

代碼

代碼在診所類

public ArrayList<Patient> getPatientsOnSpecDate(Date date) 
{ 
    ArrayList<Patient> patients = null; 
    for(Patient i : patientList) 
    { 
     if(i.searchDates(date)!=null) 
     { 
     patients.add(i); 
     } 
    } 
    return patients; 
} 

空指針錯誤代碼

Exception in thread "main" java.lang.NullPointerException 
at pkg.Pagamutan.Clinic.UI.printPatientsOnDate(UI.java:81) 

回答

1

ArrayList<Patient> patients參考變量是null。目前它不指向任何ArrayList<Patient>對象。

ArrayList<Patient> patients = null; 

而當你試圖對null參考它拋出NullPointerException調用.add()

當應用程序試圖在需要對象的情況下嘗試使用null時拋出。

這些包括:

調用一個空對象的實例方法。 .............

你需要它調用.add()之前實例化一個ArrayList<Patient>對象。

ArrayList<Patient> patients = new ArrayList<Patient>(); 

或者更好地利用List<Patient>爲引用類型:

List<Patient> patients = new ArrayList<Patient>(); 
+0

非常感謝!錯誤不會彈出,但我有另一個問題。打電話時,printPatientsOnDate不打印任何患者。每個循環有什麼問題嗎? – ZeroStream

+0

向我們展示正在運行的代碼,可能會用該代碼打開一個新問題。我們不能用兩種隨機方法進行調試! – NINCOMPOOP

+0

對不起。這裏是運行代碼http://textuploader.com/?p=6&id=HTDi – ZeroStream