2011-03-23 2 views
1

J'ai posté ce code plus tôt, mais on m'a dit de le nettoyer et de le rediffuser. Les erreurs que je reçois sont:Pourquoi est-ce que j'obtiens une exception NullPointerException?

Exception in thread "main" java.lang.NullPointerException 
    at java.awt.Container.addImpl(Unknown Source) 
    at java.awt.Container.add(Unknown Source) 
    at FVolume.createCustomers(FVolume.java:74) 
    at FVolume.<init>(FVolume.java:21) 
    at FVolume.main(FVolume.java:270) 

Voici le code:

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.util.*; 
import java.io.*; 

public class FVolume extends JFrame implements ActionListener{ 
    private JTabbedPane jtabbedPane; 
    private JPanel Customers; 

    JTextArea NameTextCustomers, ExistTextCustomers, NameTextContractors, ExistTextContractors; 

    public FVolume(){ 
     setTitle("Volume Calculator"); 
     setSize (300, 200); 

     JPanel topPanel = new JPanel(); 
     topPanel.setLayout(new BorderLayout()); 
     getContentPane().add(topPanel); 

     createCustomers(); 

     jtabbedPane = new JTabbedPane(); 
     jtabbedPane.addTab("Customers", Customers); 
     topPanel.add(jtabbedPane, BorderLayout.CENTER); 

    } 
    /*  CREATE CUSTOMERS */ 

    public JPanel createCustomers(){ 
     Customers = new JPanel(); 
     Customers.setLayout(null); 

     NameTextCustomers = new JTextArea(); 
     NameTextCustomers.setBounds(10, 10, 350, 150); 
     NameTextCustomers.setLineWrap(true); 
     Customers.add(NameTextCustomers); 

     JButton Exit = new JButton("Exit"); 
     Exit.setBounds(30,170,80,20); 
     Exit.addActionListener(this); 
     Exit.setBackground(Color.white); 
     Customers.add(Exit); 

     JButton AddCustomers = new JButton("Add Customer"); 
     AddCustomers.setBounds(130,170,120,20); 
     AddCustomers.setBackground(Color.white); 
     Customers.add(AddCustomers); 

     JButton Refresh = new JButton("Refresh"); 
     Refresh.setBounds(260,170,80,20); 
     Refresh.setBackground(Color.white); 
     Customers.add(Refresh); 

     ExistTextCustomers = new JTextArea(); 
     ExistTextCustomers.setBounds(10, 200, 350, 60); 
     ExistTextCustomers.setLineWrap(true); 
     Customers.add(ExistTextCustomers); 

     final JTextArea custArea = new JTextArea(6, 30); 
     final JTextArea custMessage = null; 

     AddCustomers.addActionListener(new ActionListener() 
     { 
     public void actionPerformed(ActionEvent e) 
     { 
     new Customer("Customer"); 
    } 
     }); 
     Customers.add(custArea); 
     Customers.add(AddCustomers); 

     Customers.add(Refresh); 
     Customers.add(custMessage); 
     Refresh.setMnemonic('R'); 

     Refresh.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
     custMessage.setText(""); 
     try 
     { 
      File custOpen = new File("customer.txt"); 
      FileReader custAreaIn = new FileReader(custOpen); 
      custArea.read(custAreaIn, custOpen.toString()); 
      custMessage.setText("The file exists and can be read from."); 
     } 
     catch (IOException e3){ 
     custMessage.setText("The file could not be read. " + e3.getMessage()); 
      } 
     } 
    } 
    ); 
     return Customers; 
} 
class Customer extends JFrame 
{ 
    private String[] states = {"AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", 
      "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", 
      "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", 
      "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", 
      "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY"}; 
      private JComboBox StateList = new JComboBox(states); 
      private JTextField NameText = new JTextField(25); 
      private JTextField AddressText = new JTextField(25); 
      private JTextField CityText = new JTextField(25); 
      private JTextField ZipText = new JTextField(9); 
      private JTextField PhoneText = new JTextField(10); 
      private JTextField PopMessageText = new JTextField(30); 
      private static final long serialVersionUID = 1L; 

      private AddCustButtonHandler addCusHandler = new AddCustButtonHandler(); 

      public Customer(String who) 
      { 
       popUpWindow (who); 
      } 
      public void popUpWindow(final String who) { 
       final JFrame popWindow; 
       popWindow = new JFrame(who); 
       popWindow.setSize(425, 350); 
       popWindow.setLocation(100, 100); 
       popWindow.setVisible(true); 
       setDefaultCloseOperation(EXIT_ON_CLOSE); 

       Container c = new Container(); 

       popWindow.add(c); 

       c.setLayout(new FlowLayout()); 

       JPanel one = new JPanel(); 
       JPanel two = new JPanel(); 
       JPanel three = new JPanel(); 
       JPanel four = new JPanel(); 
       JPanel five = new JPanel(); 
       JPanel six = new JPanel(); 

       one.add(new JLabel(who + " Name ")); 
       one.add(NameText); 
       two.add(new JLabel("Address ")); 
       two.add(AddressText); 
       three.add(new JLabel("City ")); 
       three.add(CityText); 
       four.add(new JLabel("State ")); 
       StateList.setSelectedIndex(0); 
       four.add(StateList); 
       four.add(new JLabel("ZIP")); 
       four.add(ZipText); 
       four.add(new JLabel("Phone")); 
       four.add(PhoneText); 
       JButton addwho = new JButton("Add " + who); 
       addwho.setMnemonic('A'); 
       JButton close = new JButton("Close"); 
       close.setMnemonic('C'); 
       JButton deleteFile = new JButton("Delete File"); 
       deleteFile.setMnemonic('D'); 
       five.add(addwho); 
       five.add(close); 
       five.add(deleteFile); 
       PopMessageText.setEditable(false); 
       PopMessageText.setHorizontalAlignment(JTextField.CENTER); 

       six.add(PopMessageText); 
       c.add(one); 
       c.add(two); 
       c.add(three); 
       c.add(four); 
       c.add(five); 
       c.add(six); 

       deleteFile.setToolTipText("Delete File"); 
       addwho.setToolTipText("Add "+ who); 
       close.setToolTipText("Close"); 

       if (who == "Customer") 
        addwho.addActionListener(addCusHandler); 
       close.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         NameText.setText(""); 
         AddressText.setText(""); 
         CityText.setText(""); 
         ZipText.setText(""); 
         PhoneText.setText(""); 
         PopMessageText.setText(""); 
         popWindow.dispose(); 
        } 
       } 
       ); 
       deleteFile.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         PopMessageText.setText(""); 
         if (who == "Customer") { 
          File file = new File("Customer.txt"); 
          boolean cusFileDeleted = file.delete(); 
          if (cusFileDeleted) { 
           PopMessageText 
           .setText("Customer file has been deleted"); 
          } else { 
           PopMessageText 
           .setText("There was an error in deleting file"); 
          } 
          } 
         } 
        } 
       ); 
      } 
      class AddCustButtonHandler implements ActionListener { 
       public void actionPerformed(ActionEvent addCusHandler) { 
        int StateIndex; 
        try { 
         File file = new File("Customer.txt"); 
         boolean success = file.createNewFile(); 
         if (success) { 
          PopMessageText 
          .setText("Customer.txt file created file added"); 
         } else if (file.canWrite()) { 
          PopMessageText 
          .setText("Writing data to Customer.txt, file added"); 
         } else { 
          PopMessageText.setText("Cannot create file: Customer.txt"); 
         } 
         try { 
          FileWriter fileW = new FileWriter("Customer.txt", true); 
          fileW.write(NameText.getText()); 
          fileW.write(","); 
          fileW.write(AddressText.getText()); 
          fileW.write(","); 
          fileW.write(CityText.getText()); 
          fileW.write(","); 
          StateIndex = StateList.getSelectedIndex(); 
          fileW.write(states[StateIndex]); 
          fileW.write(","); 
          fileW.write(ZipText.getText()); 
          fileW.write(","); 
          fileW.write(PhoneText.getText()); 
          fileW.write("\r\n"); 
          fileW.close(); 
          PopMessageText.setText("A new Customer has been added!"); 
          FileReader fileR = new FileReader("Customer.txt"); 
          BufferedReader buffIn = new BufferedReader(fileR); 
          String textData = buffIn.readLine(); 
          buffIn.close();       
         } 
         catch (IOException e1) { 
          JOptionPane.showMessageDialog(null, e1.getMessage(), "ERROR", 2); 
         } 
         NameText.setText(""); 
         AddressText.setText(""); 
         CityText.setText(""); 
         ZipText.setText(""); 
         PhoneText.setText(""); 
         } 
        catch (IOException e1) { 
        } 
       } 
      } 
      public void actionPerformed(ActionEvent event){ 
      } 
       private void Exit_pressed(){ 
        System.exit(0); 
       } 
      } 
      public void actionPerformed(ActionEvent e) { 
      } 


       public static void main(String[] args){ 
        JFrame frame = new FVolume(); 
        frame.setSize(380, 350); 
        frame.setVisible(true); 
    } 

} 

Répondre

6

C'est le problème:

final JTextArea custMessage = null; 
... 
Customers.add(custMessage); 

Qu'est-ce que vous espérez que cela ferait? Vous n'êtes pas autorisé à transmettre une référence null à la méthode add, fondamentalement.

Pour référence ultérieure, l'indice de diagnostiquer vous-même est de trouver le premier bit de la trace de la pile qui fait référence à votre code - qui dans ce cas est la ligne:

Customers.add(custMessage); 

Ensuite, regardez ce qu'il utilise (Customers et custMessage) et travailler si elles vont bien. Dans ce cas, il est assez clair que la valeur de custMessage est nulle, ce qui n'est pas autorisé.

+0

Merci, j'ai cette partie à travailler maintenant. J'ai remarqué que lorsque je clique sur le bouton d'actualisation de mon interface graphique, cela ne fonctionne pas. Une liste complète d'erreurs apparaît. – Mike

+2

@Mike: attaquez-en un à la fois, voyez ce que vous pouvez faire vous-même, puis publiez un programme * short * mais complet démontrant * simplement * ce problème dans une nouvelle question. Je soupçonne que souvent vous constaterez que le processus de création d'un programme court mais complet vous mènera à la réponse. –

Questions connexes