为什么我在这段代码上得到null?

时间:2009-11-20 11:44:57

标签: java

这是我的JDilog表单的源代码(当我输入按钮时)。我已经从SystemManagement类创建了一个对象,这是一个管理(我也写了这个类的一部分)。当用户使用addStudent()课程中的SystemManagement方法添加她/他的信息时,我将她/他的信息添加到学生列表中,但是当我写作时

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

}

6 个答案:

答案 0 :(得分:1)

使用提供的管理类的其他源代码,getField()方法将始终返回一个空的ArrayList。如果您调用addStudent,新学生将被添加到学生列表中,但不会修改字段ArrayList(基于给定的代码)。因此,getField方法将始终返回空结果。

答案 1 :(得分:0)

我没有在SystemManagement类中看到getField()方法

答案 2 :(得分:0)

您应该增加一致性 - 与您要使用getField()和setField(String字段)访问的值相关的List结构的内容是否与用于创建Student的字段参数相关?

现在你的代码不能编译,除非你定义了一个类成员'String field'。

如果您想获得刚刚使用submit方法设置的字段值,那么您必须从Student获取它。这是现在的问题 - 最简单的解决方法:

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;    
}

但你仍然需要解决'Field'问题(如上所述的一致性)

答案 3 :(得分: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 null 。搜索分配,您可以找到答案。

答案 4 :(得分:0)

找出错误的最简单方法是在IDE的调试器中以调试模式运行代码,并按照程序流程检查变量,错误应该变得很明显。

有一些关于使用Eclipse调试器here的优秀视频教程,但即使您不使用Eclipse,一般概念都是相关的。

答案 5 :(得分:0)

一些可能有帮助的一般性评论。

您似乎有一个getField()和一个getFields()方法。一个可能是为了返回你的字段列表,但我不确定你期望对方返回什么。您想要特定学生的特定领域吗?在这种情况下,您需要将某种参数传递给方法(例如学生姓名),然后您可以找到要返回的特定字段。

使用addStudent()方法添加学生时,您还需要保持其余列表的最新状态。如果要维护所有字段的主列表,则需要在添加新学生时添加(如果需要 - 不需要添加任何重复项)。

我希望以上内容有所帮助。