【问题标题】:NullPointerException when adding Object to ArrayList将对象添加到 ArrayList 时出现 NullPointerException
【发布时间】:2023-03-22 10:49:01
【问题描述】:

我是 Java 新手,一直在尝试设置一个 ArrayList CustomerList,它接受对象 Customer,其中 CustomerIAddress 类的属性。然而,当在我的主代码中调用 .add 方法时,我收到了一个 NullPointerException 错误,我认为这是因为我的方法没有收到任何要添加的内容数组列表。我认为这是将属性初始化为空字符串的问题,但是在编辑它们以包含一些信息时,仍然出现错误。

ArrayList 客户列表

public class CustomerList {

public ArrayList<Customer> Clients;

public CustomerList() {
    Clients = new ArrayList<>();
}

public void add(Customer src) {        
    Clients.add(src);
}

public void remove(Customer src) {
    Clients.remove(src);
}

public void Display(JTextArea jClientsTextArea) {
    for (int i = 0; i < Clients.size(); i++) {
        Clients.get(i).Display(jClientsTextArea);
    }
}
}

从这个类接收客户

public class Customer {

private String FirstName;
private String Surname;
private IAddress HomeAddress;
public String DOB;

public Customer() {
    FirstName = "";
    Surname = "";
    DOB = "01/01/1900";
    HomeAddress = new IAddress();

    public void Display(javax.swing.JTextArea jAddressTextArea) {
    jAddressTextArea.setLineWrap(true);
    jAddressTextArea.append("First Name: " + FirstName + "\n");
    jAddressTextArea.append("Surname: " + Surname + "\n");
    jAddressTextArea.append("DOB:" + DOB + "\n");
    jAddressTextArea.append("Street: " + HomeAddress.getStreet() + "\n");
    jAddressTextArea.append("House Name: " + HomeAddress.getHouseName() + "\n");
    jAddressTextArea.append("House Number: " + HomeAddress.getHouseNo() + "\n");
    jAddressTextArea.append("Area: " + HomeAddress.getArea() + "\n");
    jAddressTextArea.append("Postcode: " + HomeAddress.getPostCode() + "\n");
    jAddressTextArea.append("Town: " + HomeAddress.getTown() + "\n");
    jAddressTextArea.append("Country: " + HomeAddress.getCountry() + "\n");
}


    public void Edit(String strfirstname, String strsurname, String strDOB, String strStreet, String strHouseName, String strHouseNo, String strHouseArea, String strPostCode, String strTown, String strCountry) {
    FirstName = strfirstname;
    Surname = strsurname;
    DOB = strDOB;
    HomeAddress.setStreet(strStreet);
    HomeAddress.setHouseName(strHouseName);
    HomeAddress.setHouseNo(strHouseNo);
    HomeAddress.setArea(strHouseArea);
    HomeAddress.setPostCode(strPostCode);
    HomeAddress.setTown(strTown);
    HomeAddress.setCountry(strCountry);
}
}

IAddress

接收属性
public class IAddress {

private String Name;
private String Street;
private String HouseNo;
private String HouseName;
private String Area;
private String PostCode;
private String Town;
private String Country;

public IAddress() {
    Name = "";
    Street = "";
    HouseNo = "";
    HouseName = "";
    Area = "";
    PostCode = "";
    Town = "";
    Country = "";
}



public void setName(String strName) {
    Name = strName;
}

public void setStreet(String strStreet) {
    Street = strStreet;
}

public void setHouseNo(String strHouseNo) {
    HouseNo = strHouseNo;
}

public void setHouseName(String strHouseName) {
    HouseName = strHouseName;
}

public void setArea(String strArea) {
    Area = strArea;
}

public void setPostCode(String strPostCode) {
    PostCode = strPostCode;
}

public void setTown(String strTown) {
    Town = strTown;
}

public void setCountry(String strCountry) {
    Country = strCountry;
}

}

几个小时以来,我一直在努力解决这个问题,并准备好让它变得非常简单。谢谢。

【问题讨论】:

  • 不要假设。阅读并发布异常堆栈跟踪,并得出结论。
  • 请告诉我们调用这一切的代码
  • 你能发布异常(完整的堆栈跟踪)吗?
  • 您传递给add()Customer 可能尚未初始化。可以分享一下你的主要方法吗?

标签: java object arraylist


【解决方案1】:

在上面的代码中,调用myCustomerList.add(...) 可能抛出的唯一原因是myCustomerList 本身就是null。这是因为它里面的Clients是在构造函数中初始化的,并且再也不会设置为nullsrc 的值也无关紧要 - 即使 srcnull,对 Clients.add(src) 的调用也会成功。

您需要确保在您的main 中确实初始化了您的客户列表,如下所示:

CustomerList list = new CustomerList();

【讨论】:

  • 正是这个问题,非常感谢。很抱歉没有发布完整的错误日志和主要代码,这是我一直在从事的一个更大项目的一小部分,我没有时间剪掉相关的代码部分。
猜你喜欢
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 2018-05-25
相关资源
最近更新 更多