title: Java ArrayList null pointer exception
body: <p><strong>EDIT</strong></p>
  
  <p>I've cleaned up the .equals method for string equality and changed the ContactsCollection initialization to:</p>
  
  <pre><code>public static ArrayList&lt;Contact&gt; contactList = new ArrayList&lt;Contact&gt;();
  </code></pre>
  
  <p>I've also changed the action performed method in hopes that 'Display contacts' would show more than one contact.</p>
  
  <pre><code>    if (contactInput.equals("Display contacts"))
      {
          ContactsCollection.read();
          for (int i = 0; i &lt; contactList.size(); i++)
          {
              contact = (Contact)contactList.get(i);
              for (int j =0; j &lt; contactList.size(); j++)
              {
                  textArea.append(contact.getName() + "," + contact.getNumber() + "\n");
              }
          }
      }
  </code></pre>
  
  <p>Ultimately the .dat file is written but does not contain any data that is added through the GUI.</p>
  
  <p><strong>END EDIT</strong></p>
  
  <p>I am writing a mock cellphone GUI that acts as a very basic contacts manager.  There are several other classes that do not deal with the ArrayList that are working as intended.  </p>
  
  <p>When attempting to add a contact to the file I receive a null pointer exception at line 13 of the ContactsCollection class:</p>
  
  <pre><code>for (int i = 0; i &lt; contactList.size(); i++)
  </code></pre>
  
  <p>and line 93 of the Contacts (GUI) class:</p>
  
  <pre><code>contactList.add(contact);
  </code></pre>
  
  <p>I have a feeling that I did something wrong when coding the Contacts and ContactsCollection classes.  I'm hoping the program to run as follows:  The user clicks add contact and enters the information which becomes an object Contact and is added to the contactList ArrayList and written (serialized) to a file "contactList.dat".  When the user clicks display contacts the file is read in and each contact is displayed in GUI.</p>
  
  <p>I think that there are several issues with the way I set up the ArrayList, but I think I'm very close to having the program run as I had hoped.  Any help is greatly appreciated!</p>
  
  <p>Contacts class:</p>
  
  <pre><code>import java.util.*;
  import java.io.*;
  
  public class Contact implements Serializable
  {
  public static final long serialVersionUID = 42L;
  public String name, number;
  
  Contact()
  {
      name = "No name";
      number = "No number";
  }
  
  Contact (String theName, String theNumber)
  {
      this.name = theName;
      this.number = theNumber;
  }
  
  public void setName(String aName)
  {
      this.name = aName;
  }
  
  public void setNumber(String aNumber)
  {
      this.number =aNumber;
  }
  
  public String getName()
  {
      return name;
  }
  
  public String getNumber()
  {
      return number;
  }
  
  public String toString()
  {
      return name + ": " + number;
  }
  
  public boolean equals(Contact other)
  {
     if (name.equals(other.getName()) &amp;&amp; number.equals(other.getNumber()))
     {
        return(true);
     }
     else
     {
        return(false);
     }
  }   
  }
  </code></pre>
  
  <p>Contacts Collection class</p>
  
  <pre><code>import java.io.*;
  import java.util.*;
  
  class ContactsCollection
  {
  public static ArrayList&lt;Contact&gt; contactList;
  
  public static void write()
  {
      try 
      {
          ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("contactList.dat"));
          for (int i = 0; i &lt; contactList.size(); i++)
          {
              out.writeObject(contactList.get(i));
          }
          out.close();
      } 
      catch(IOException e)
      {
          e.printStackTrace();
      }
  }
  
  public static void read()
  {
  contactList = new ArrayList&lt;Contact&gt;();
  try
  {
      ObjectInputStream in = new ObjectInputStream(new FileInputStream("contactList.dat"));
      Contact temp;
      while (in.available()!=0)
      {
          temp = (Contact)in.readObject();
          contactList.add(temp);
      }
      in.close();
  }
  catch(FileNotFoundException e)
  {
      e.printStackTrace();
  }
  catch(IOException e)
  {
      e.printStackTrace();
  }
  catch(ClassNotFoundException e)
  {
      e.printStackTrace();
  }       
  
  }
  }
  </code></pre>
  
  <p>Contacts (GUI) class</p>
  
  <pre><code>import java.awt.*;
  import javax.swing.*;
  import java.awt.event.*;
  import javax.swing.Timer;
  import java.util.*;
  
  class Contacts extends JFrame implements ActionListener, WindowListener
  {
  public static final int WIDTH = 400;
      public static final int HEIGHT = 600;
      public static final int SMALL_WIDTH = 200;
      public static final int SMALL_HEIGHT = 100;
  
  private static final Dimension stdBtn = new Dimension(150, 50);    
  
      JPanel centerPanel, northPanel, southPanel;
  ImageIcon icon;
  JLabel picture;
  JButton addContact, displayContacts;
  JScrollPane scroll;
  JTextArea textArea;
  Clock clock;
  Background background;
  Contact contact;
  ArrayList&lt;Contact&gt; contactList;
  
  
  public Contacts()
  {
      super("Contacts");
      this.setLayout(new BorderLayout());
      this.setSize(WIDTH, HEIGHT);
      this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
      addWindowListener(this);
      this.setLocationRelativeTo(null);
  
      centerPanel = new JPanel();
      northPanel = new JPanel();
      southPanel = new JPanel();
  
      centerPanel.setBackground(Color.BLACK);
      southPanel.setBackground(Color.BLACK);      
  
      clock = new Clock();
      northPanel.add(clock);
  
      icon = new ImageIcon("ContactsBackground.jpg");
      picture = new JLabel(icon);
      centerPanel.add(picture);
  
      textArea = new JTextArea("", 10, 30);
      textArea.setEditable(false);
      JScrollPane scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
              JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);    
      centerPanel.add(scroll);    
  
      JButton displayContacts = new JButton("Display contacts");
      displayContacts.addActionListener(this);
      southPanel.add(displayContacts);
  
      JButton addContact = new JButton("Add contact");
      addContact.addActionListener(this);
      southPanel.add(addContact);
  
      this.add(northPanel, BorderLayout.NORTH);
      this.add(centerPanel, BorderLayout.CENTER);
      this.add(southPanel, BorderLayout.SOUTH);       
  
      setResizable(false);        
  }
  
  public void actionPerformed(ActionEvent e)
  {
      contactList = new ArrayList&lt;Contact&gt;();
      JButton source = (JButton)e.getSource();
      String contactInput = source.getText();
  
      if (contactInput == "Display contacts")
      {
          ContactsCollection.read();
          for (int i = 0; i &lt; contactList.size(); i++)
          {
              contact = (Contact)contactList.get(i);
              textArea.setText(contact.getName() + "," + contact.getNumber() + "\n");
          }
      }
      if (contactInput == "Add contact")
      {
          String name = JOptionPane.showInputDialog(null, "Enter Name");
          String number = JOptionPane.showInputDialog(null, "Enter Number");
          contact = new Contact(name, number);
          contactList.add(contact);
          ContactsCollection.write();
      }
  }
  
  public void windowOpened(WindowEvent e)
  {}
  
  public void windowClosing(WindowEvent e)
  {
      this.setVisible(false);
      background = new Background();
      background.setVisible(true);        
  }
  
  public void windowClosed(WindowEvent e)
  {}
  
  public void windowIconified(WindowEvent e)
  {}
  
  public void windowDeiconified(WindowEvent e)
  {}
  
  public void windowActivated(WindowEvent e)
  {}
  
  public void windowDeactivated(WindowEvent e)
  {}      
  }
  </code></pre>