-1

有人可以解释为什么我不断收到这个错误吗?该程序是一个地址簿,将接受公司地址或个人地址。每次添加地址时,我都会收到错误邮政编码错误:'ca14 3xn',然后是线程“AWT-EventQueue-0”java.lang.NullPointerException 中的异常。这是我的代码(我省略了一些方法):

class AddressBookGUI extends JFrame
  implements ActionListener
{
    private ExtendedAddressBook addressbook;

 /**
     * Constructor 
     */
    public AddressBookGUI()
    {
        addressbook = new ExtendedAddressBook();
    }

  public AddressBookGUI(String Title)
  {
    //Removed code    }

  private void showFrame()
  {
    //Removed code
  }

  private void makeFrame()
  {
    //Removed code

  }


  public void actionPerformed(ActionEvent e)
  {
    if ((e.getSource() instanceof JButton))
    {
      //Removed some code

      if (e.getSource() == btnEnter)
      {   
          if (entryType == "Personal")
          {
              //Check if fields are empty                 }
              else {
                   String firstName = this.fldFirstName.getText();
                   String lastName = this.fldLastName.getText();
                   String street = this.fldStreet.getText();
                   String town = this.fldTown.getText();
                   String postcode = this.fldPostCode.getText();
                   String dob = this.fldVariable.getText();
                   addressbook.add(new Personal(firstName, lastName, street, town, postcode, dob));
                }
            }
        }
    }
   }

}

入职类:

   public Entry(String paramString1, String paramString2, String paramString3, String paramString4, String paramString5)
 {
    this.firstName = paramString1;
    this.lastName = paramString2;
    this.street = paramString3;
    this.town = paramString4;
    if (paramString5.matches("[A-Z]{2}[0-9]{1,2} [0-9]{1,2}[A-Z]{2}")) {
       this.postCode = paramString5;
    } 
    else {
       System.err.printf("Bad postcode: '%s'\n", new Object[] { paramString5 });
       this.postCode = "???";
    }
}

地址簿类:

public String add(Entry paramEntry)
{
if (paramEntry == null)
  return "Error: null entry";
if (this.data.contains(paramEntry)) {
  return "Error: this entry already in the book";
}
boolean bool = this.data.add(paramEntry);
if (bool) {
  return " entry added";
}
return "entry could not be added";
}

扩展地址簿:

public class ExtendedAddressBook extends AddressBook
{

public String getPersonal()
{
    String PersonalList = "";
    ArrayList<Entry> allEntries = getAddressBook();
    for ( Entry entry : allEntries )
    {
        if ( entry instanceof Personal )
        {
            PersonalList = PersonalList + entry.toString();
        }
    }
    return PersonalList;
}

}

线上出现错误 addressbook.add(new Personal(firstName, lastName, street, town, postcode, dob)); 这是跟踪:

错误的邮政编码:'ca14 3xn'

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at AddressBookGUI.actionPerformed(AddressBookGUI.java:314)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
4

1 回答 1

1

正如我所见的 AddressBookGUI 类,有 2 个构造函数,但只有一个没有参数的构造函数初始化addressbook = new ExtendedAddressBook();

我来宾您可能会调用第二个带有标题的构造函数,这就是为什么addressbook为空。这是 NullPointException 的原因。

==> 解决方案是addressbook在第二个构造函数中添加初始化。

错误的邮政编码:请参阅此示例:

public class PostCodeCheck {
public static void main(String[] args) {
    String postcode = "ca14 3xn";
    System.out.print("\"" 
            + postcode 
            + "\" is " 
            + postcode.matches("[A-Z]{2}[0-9]{1,2} [0-9]{1,2}[A-Z]{2}"));
    postcode = "CA14 3XN";
    System.out.println(" And \n\"" 
            + postcode + "\" is " + postcode.matches("[A-Z]{2}[0-9]{1,2} [0-9]{1,2}[A-Z]{2}")
            + " \nbecause it accepts postcode with capital letter only!");
}

}

于 2013-04-25T08:56:30.060 回答