2009-11-20 65 views
-1

這是我的源代碼(當我輸入按鈕時)我的JDilog表單的一部分。我從SystemManagement這個管理類(我也寫過這個類的一部分)中提出了一個對象。當用戶在SystemManagement類添加他/她的信息,與addStudent()方法我她/他的信息添加到學生的名單,但是當我寫爲什麼我在這段代碼上變爲null?

System.out.println(management.getField()); 

它將返回null!爲什麼?

private void submit() { 
    String name = nameField.getText(); 
    String family = familyField.getText(); 
    String ye = (String) yearComboBox.getSelectedItem(); 
    String ci = (String) cityComboBox.getSelectedItem(); 
    String fi = (String) fieldComboBox.getSelectedItem(); 
    if (ye == null) { 
     JOptionPane.showMessageDialog(this, "You haven't chosen the year of entrance", "Error", JOptionPane.ERROR_MESSAGE); 
     return; 
    } 
    if (ci == null) { 
     JOptionPane.showMessageDialog(this, "You have not set the city", "Error", JOptionPane.ERROR_MESSAGE); 
     return; 
    } 
    if (fi == null) { 
     JOptionPane.showMessageDialog(this, " You have not set the field", "Error", JOptionPane.ERROR_MESSAGE); 
     return; 
    } 
    if (name.equals("")) { 
     JOptionPane.showMessageDialog(this, "You have not set your name ", "Error", JOptionPane.ERROR_MESSAGE); 
     return; 
    } 
    if (family.equals("")) { 
     JOptionPane.showMessageDialog(this, " You have not set the family", "Error ", JOptionPane.ERROR_MESSAGE); 
     return; 
    } 
    management.addStudent(name, family, ye,ci, fi); 
    System.out.println(management.getField()); 
    JOptionPane.showMessageDialog(this, management.toString(), " registered successefully", JOptionPane.INFORMATION_MESSAGE); 
    clear(); 

} 

public class SystemManagement implements Serializable { 

private String siteName; 
private List<Fields> fields; 
private List<Professors> professors; 
private List<Students> students; 
private List<Lessons> lessons; 
public Professors pro; 
public Lessons les; 


public SystemManagement(String siteName) { 
    this.siteName = siteName; 
    professors = new ArrayList<Professors>(); 
    students = new ArrayList<Students>(); 
    lessons = new ArrayList<Lessons>(); 
    fields = new ArrayList<Fields>(); 
} 

public List<Fields> getFields() { 
    return fields; 
} 

public void setField(String field) { 
    this.field = field; 
} 

public String getField() { 
    return field; 
} 


public void addStudent(String name, String family, String yearOfEntrance, String city, String field) { 
    Students student = new Students(name, family, yearOfEntrance, city, field); 
    students.add(student); 

} 
+0

很難說不知道這個管理類,特別是getField()方法是如何實現的,或者實際返回的是什麼。請優化您的問題並提供一些課程代碼。 – Olli 2009-11-20 11:49:26

+0

另外,這個問題與標題無關? – Olli 2009-11-20 11:50:18

+0

標題應該更加具體 – 2009-11-20 12:46:41

回答

1

井與設置在管理類的額外的源代碼,所述getfield命令()方法將總是返回一個空的ArrayList。如果你調用addStudent,一個新學生將被添加到學生列表中,但是字段ArrayList不會被修改(根據給出的代碼)。所以,getField方法將總是返回一個空的結果。

+0

所以我該怎麼辦? – Johanna 2009-11-20 12:25:58

0

我沒有看到getfield命令()方法在你SystemManagement類

+0

對不起,我編輯了我的代碼! – Johanna 2009-11-20 12:31:45

0

您應該增加一致性 - 是關係到你想要getfield命令()和setField訪問值列表結構的內容(字符串場)並且與用於創建學生的字段參數相關?

現在你的代碼不會編譯,除非你定義了一個類成員'String field'。

如果您想獲得剛剛使用submit方法設置的字段值,那麼您必須從學生處獲取它。這是一個問題,現在 - 最簡單的解決辦法:

Student added = management.addStudent(name, family, ye,ci, fi); 
System.out.println(added.getField()); 

假設學生具有字段值的一個getter和管理類:

public Student addStudent(String name, String family, String yearOfEntrance, String city,  String field) { 
    Students student = new Students(name, family, yearOfEntrance, city, field); 
    students.add(student); 
    return student;  
} 

但是你還是要解決的「現場」的問題(如上所述一致性)

0

但是當我寫

System.out.println(management.getField()); 

它會返回null!爲什麼?

因爲您尚未將值設置爲field屬性。

不知何故,你設法弄亂了代碼。您發佈的內容雖然很有意思,但不包含任何對field屬性的引用,也不顯示其分配值的位置。

最接近的事是addStudent方法

public void addStudent(String name, String family, String yearOfEntrance, String city, String field) { 
    Students student = new Students(name, family, yearOfEntrance, city, field); 
    students.add(student); 

} 

但是,這不設置值的屬性field

要解決您的問題搜索field屬性並找出您在哪裏設置值。

搜索字符串:

field = 

的方法被執行爲:

public String getField() { 
    return field; 
} 

它返回null將是field唯一方式。搜索分配,你可以找到答案。

0

找出錯誤的最簡單方法是在IDE調試器中以調試模式運行代碼,然後按照程序流程檢查變量,並且錯誤應該變得明顯。

關於使用Eclipse調試器here有一些優秀的視頻教程,但即使您沒有使用Eclipse,一般概念都是相關的。

0

一些一般性評論可能有幫助。

您似乎有一個getField()和一個getFields()方法。大概是打算返回你的領域清單,但我不確定你期望對方返回什麼。你想爲特定的學生提供一個特定的領域嗎?在這種情況下,您需要將某種參數傳遞給方法(例如學生姓名),然後您可以找到要返回的特定字段。

當您使用addStudent()方法添加學生時,您還需要保持其他列表的更新。如果您想維護所有字段的主列表,則需要在添加新學生時添加(如有必要 - 不需要添加任何重複項)。

我希望上面的幫助。