Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException ERROR

Status
Niet open voor verdere reacties.

italianmof

Nieuwe gebruiker
Lid geworden
6 jan 2011
Berichten
4
Ik krijg deze foutmelding als ik myn gui laat afspele:


Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at KassaGUI.keuze(KassaGUI.java:220)
	at KassaGUI$14.actionPerformed(KassaGUI.java:545)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6041)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
	at java.awt.Component.processEvent(Component.java:5806)
	at java.awt.Container.processEvent(Container.java:2058)
	at java.awt.Component.dispatchEventImpl(Component.java:4413)
	at java.awt.Container.dispatchEventImpl(Container.java:2116)
	at java.awt.Component.dispatchEvent(Component.java:4243)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)

Myn klasse GUI:

Code:
import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.text.NumberFormat;
import java.lang.Character;
import java.lang.Number;
import java.lang.NumberFormatException;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JColorChooser;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;

/**
 * Kassa GUI
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class KassaGUI implements ActionListener
{
    private Kassa newKassa;
    private Kelner kelner;
    private Tafel tafel;
    private Producten huidigProduct;
    private double bedrag;
    private JFrame frame;

    private int huidigAantal;

    private JPanel buttonPanel1;
    private JPanel buttonPanel2;
    private JPanel buttonPanel3;
    private JPanel buttonPanel4;
    private JPanel buttonPanel5;
    private Container contentPane;
    protected JTextField textField;
    private JPanel popup;
    

    /**
     * Constructor for objects of class KassaGUI
     */
    public KassaGUI()
    {
        newKassa = new Kassa(300);
        bedrag = 0;
        makeFrame();
       
    }
   
    /**
     * Maak Swing-frame
     */
   private void makeFrame()
    {
        
        JFrame.setDefaultLookAndFeelDecorated(true);
         JFrame frame = new JFrame("Kassasysteem");
        
        makeMenuBar(frame);
        
         UIManager.put("Button.background", Color.black);
         UIManager.put("Button.foreground", Color.white);

        contentPane = frame.getContentPane();
        contentPane.setLayout(new BorderLayout());
   
        /*
         * Methode die de kelners toevoegd aan het panel.
         */
        Kelners();

        textField = new JTextField(20);
        textField.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    readInput();
                }
            });
        buttonPanel1.add(textField);

        contentPane.add(buttonPanel1, BorderLayout.NORTH);

        tafels();

        contentPane.add(buttonPanel2, BorderLayout.WEST);

        producten();

        contentPane.add(buttonPanel3, BorderLayout.CENTER);

        buttonPanel4 = new JPanel();
        buttonPanel4.setLayout(new FlowLayout());
        JButton bestel = new JButton("Toon Bestelling");
        bestel.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    if(tafel == null) {
                      System.out.println("Selecteer eerst een tafel, daarna een kelner");
   
                        //JOptionPane.showMessageDialog(frame,
   // "Selecteer eerst een tafel, daarna een kelner.",
   // "Foutmelding",
   // JOptionPane.WARNING_MESSAGE);
                    }
                    else {
                        tafel.toonBestelling();
                    }
                }
            });
        buttonPanel4.add(bestel);

        JButton afrekenen = new JButton("Afrekenen");
        afrekenen.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    if(tafel==null){
                        System.out.println("Geen tafel geselecteerd.");
                        //JOptionPane.showMessageDialog(frame,
  //  "Geen tafel geselecteerd.",
  //  "Foutmelding",
  //  JOptionPane.WARNING_MESSAGE);
                    }
                    else{
                        if(bedrag >= tafel.prijsBestelling()) {
                            newKassa.inhoud(tafel.prijsBestelling());
                            tafel.afrekenen(bedrag);

                        }

                        else {
                            System.out.println("Geen geld of te weinig geld ingegeven.");
                           // JOptionPane.showMessageDialog(frame,
  //  "Te weinig geld ingegeven",
  //  "Foutmelding",
   // JOptionPane.WARNING_MESSAGE);
                        }
                    }
                }
            });
        buttonPanel4.add(afrekenen);

        JButton undo = new JButton("Undo");
        undo.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                }
            });
        buttonPanel4.add(undo);

        contentPane.add(buttonPanel4, BorderLayout.SOUTH);

        JButton Stock = new JButton("Stock");
        Stock.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    stock();
                }
            });
        buttonPanel4.add(Stock);

        contentPane.add(buttonPanel4, BorderLayout.SOUTH);

        frame.pack();
        frame.setSize(1100,700);
        frame.setVisible(true);
    }

    /**
     * selecteer de gewenste kelner
     */
    private void selectKelner(int i)
    {
        if(tafel == null)
        {
             System.out.println("Selecteer eerst een tafel, daarna een kelner");
            // JOptionPane.showMessageDialog(frame,
   // "Selecteer eerst een tafel, daarna een kelner",
   // "Foutmelding",
   // JOptionPane.WARNING_MESSAGE);

        }
        else
        {
            kelner = newKassa.getKelner(i-1);
            kelner.printDetails();
            tafel.kelner(kelner);
        }
    }

    /**
     * selecteer de tafel
     */
    private void selectTafel(int i)
    {
        tafel = newKassa.getTafel(i-1);
        System.out.println("Nummer tafel: " + tafel.returnNummer());
    }
  

    /**
     * selecteer het aantal dranken dat je wil bestellen via soort pop-up
     */

    public void keuze()
    {
        contentPane.remove(buttonPanel3);   
        popup = new JPanel(new GridLayout(4, 3));
        int i = 0;
        while(i<=9)
        {
            addButton(popup, ""+i);
            i++;
        } 
        contentPane.add(popup, BorderLayout.CENTER);
        frame.pack();
    }

    private void addButton(Container panel, String buttonText)
    {
        JButton button = new JButton(buttonText);
        button.addActionListener(this);
        panel.add(button);
    }

    public void actionPerformed(ActionEvent event) 
    {
        String command = event.getActionCommand();
        int i = 0;
        while(i<9){

            if(command.equals("" + i)){
                huidigAantal = i;
                newKassa.stock(i,huidigProduct);
                tafel.voegToeAanBestelling(huidigProduct, i);
            }
            i++;
        }

        contentPane.remove(popup);
        contentPane.add(buttonPanel3, BorderLayout.CENTER);
        frame.pack();

    }

    private void stock()
    {
        contentPane.remove(buttonPanel3);
        buttonPanel5 = new JPanel();
        buttonPanel5.setLayout(new BorderLayout());
        
        JLabel status = new JLabel();
        int i = 0;
        try{
            while(i<newKassa.productenSize())
            {
                System.out.println(newKassa.getProduct(i).returnNaam() + ": " + newKassa.stock(newKassa.getProduct(i)));
                i++;
            }
        }
        catch (Exception e) {
            System.out.println(e);
        }
            
        buttonPanel5.add(status, BorderLayout.NORTH);

        huidigProduct.addStock(bedrag);
        bedrag = 0;        
        JButton terug = new JButton("Gereed");
        JPanel flow = new JPanel();
        flow.add(terug);
        terug.addActionListener(new ActionListener() {
                public void actionPerformed (ActionEvent e) {
                    contentPane.remove(buttonPanel5);
                    contentPane.add(buttonPanel3, BorderLayout.CENTER);
                    frame.pack();
                }
            });
        buttonPanel5.add(flow);

        contentPane.add(buttonPanel5, BorderLayout.CENTER); 
        frame.pack();
    }

    /**
     * leest de invoer van het textveld en verandert de string in een double. 
     */
    private void readInput() //controleer of de invoer geldig is!
    {
        String bedragText = textField.getText();
        if(isDouble(bedragText)) {
            bedrag = Double.parseDouble(bedragText); 
            System.out.println("Ingegeven bedrag: " + bedrag);
        }
        else {
           System.out.println("Geen geldige invoer");
          // JOptionPane.showMessageDialog(frame,
          // "Geen geldige invoer.",
          // "Foutmelding",
          //  JOptionPane.WARNING_MESSAGE);
        }
        textField.setText("");

    }

    private boolean isDouble(String text)
    {
        try{
            Double.parseDouble(text);
        } catch(NumberFormatException nfe) {
            return false;
        }
        return true;
    }

    /**
     * Maak een nieuwe bestelling, check eerst of er een kelner en tafel geselecteerd zijn, 
     * doe anders niets en waarschuw de gebruiker
     */
    private void newBestelling()
    {
        if(kelner != null && tafel !=null) {
            
            System.out.println("Maak u bestelling.");
           // JOptionPane.showMessageDialog(frame,
           // "Maak u bestelling",
           // "Melding",
           // JOptionPane.WARNING_MESSAGE);


        }
        else {
           
           System.out.println("Selecteer een kelner en een tafel");
          // JOptionPane.showMessageDialog(frame,
   // "Selecteer eerst een tafel, daarna een kelner",
   // "Foutmelding",
   // JOptionPane.WARNING_MESSAGE);

        }
    }

    /**
     * maak menu balk
     */
    private void makeMenuBar( JFrame frame)
    {
        //menubar
        JMenuBar menubar = new JMenuBar();
        frame.setJMenuBar(menubar);

        //menu items.
        JMenu fileMenu = new JMenu("Item");
        menubar.add(fileMenu);

        JMenu helpMenu = new JMenu("Help");
        menubar.add(helpMenu);

        //drop-downs
        JMenuItem newItem = new JMenuItem("Nieuwe bestelling");
        newItem.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) { 
                    newBestelling();
                }
            });
        fileMenu.add(newItem);

        JMenuItem kassaItem = new JMenuItem("Inhoud Kassa");
        kassaItem.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    geld();
                }
            });
        fileMenu.add(kassaItem);

        JMenuItem nebItem = new JMenuItem("Andere tafel bedienen");
        nebItem.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) { 
                   
                    System.out.println("Selecteer de bediende tafel, daarna de kelner.");
                   // JOptionPane.showMessageDialog(frame,
                   // "Selecteer de bediende tafel, daarna de kelner.",
                   // "Melding",
                   // JOptionPane.WARNING_MESSAGE);
                }
            });
        fileMenu.add(nebItem);

        JMenuItem quitItem = new JMenuItem("Stoppen");
        quitItem.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) { 
                    quitKassa();
                }
            });
        fileMenu.add(quitItem);

        JMenuItem helpItem = new JMenuItem("Informatie");
        helpItem.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) { 
                    printHelp();
                }
            });
        helpMenu.add(helpItem);        
    }

    private void quitKassa()
    {
        System.exit(0);
    }

    private void printHelp()
    {
        System.out.println("Help");
    }

    private void geld()
    {
        double geld = newKassa.getGeld();
        System.out.println("De inhoud van de kassa bedraagd: " + geld + " euro.");
    }

    /*
     * Methode die de kelners aan het panel toevoegd.
     */

    private void Kelners()
    {
        buttonPanel1 = new JPanel();
        buttonPanel1.setLayout(new FlowLayout());
        int i = 0;
        while(i<newKassa.kelnersSize())
        {
            String naam = newKassa.getKelner(i).returnNaam();
            JButton kelner = new JButton(naam);
            kelner.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e)
                    { 
                        int p = welkeKelner(e.getActionCommand());
                        selectKelner(p+1);
                    }
                });
            buttonPanel1.add(kelner);
            i++;
        }   
    }

    /*
     * Testen welke kelner aangeduid is.
     * @param kelner : de ingegeven kelner bij het induwen van de knop.
     */

    private int welkeKelner(String kelner)
    {
        int i = 0;
        while (i<newKassa.kelnersSize())
        {
            if(kelner.equals(newKassa.getKelner(i).returnNaam()))
            {
                return i;
            }
            i++;
        }
        return i;
    }

    /*
     * Methode die de tafels aan het panel toevoegd.
     */
    private void tafels()
    {
        buttonPanel2 = new JPanel();
        buttonPanel2.setLayout(new BoxLayout(buttonPanel2, BoxLayout.Y_AXIS));
        int i = 0;
        while(i<newKassa.tafelsSize())
        {

            JButton tafel = new JButton("Tafel " + newKassa.getTafel(i).returnNummer());
            tafel.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) { 
                        int p = welkeTafel(e.getActionCommand());
                        selectTafel(p+1);
                    }
                });
            i++;
            buttonPanel2.add(tafel);
        }
    }

    /*
     * Methode om te zien welke tafel geselecteerd werd.
     */
    private int welkeTafel(String tafel)
    {
        int i = 0;
        while(i<newKassa.tafelsSize())
        {
            if(("Tafel " + newKassa.getTafel(i).returnNummer()).equals(tafel))
            {
                return i;
            }
            i++;
        }
        return i;
    }

    /*
     * Methode om producten toe te voegen aan het panel.
     */
    private void producten()
    {
        int i = 0;
        buttonPanel3 = new JPanel();
        buttonPanel3.setLayout(new GridLayout(3, 3));

        while(i<newKassa.productenSize()){
            JButton product = new JButton(newKassa.getProduct(i).returnNaam());
            product.addActionListener(new ActionListener() {      
                    public void actionPerformed(ActionEvent e) { 
                        if(tafel==null)
                        {
                            System.out.println( "Er is geen tafel geselecteerd");
                            //JOptionPane.showMessageDialog(frame,
                           // "Er is geen tafel geselecteerd",
                           // "Foutmelding",
                           // JOptionPane.WARNING_MESSAGE);

                        }
                        else if(tafel.kelner()==null)
                        {
                            System.out.println( "Selecteer eerst een kelner voor deze tafel");
                           // JOptionPane.showMessageDialog(frame,
                           // "Selecteer eerst een kelner voor deze tafel",
                           // "Foutmelding",
                           // JOptionPane.WARNING_MESSAGE);

                        }
                        else
                        {
                            int p = welkProduct(e.getActionCommand());
                            huidigProduct = newKassa.getProduct(p);
                            keuze();
                        }
                    }
                });

            i++;
            buttonPanel3.add(product);
        }
    }

    /**
     * Zien welk product geselecteerd is.
     */
    private int welkProduct(String product)
    {
        int i = 0;
        while(i<newKassa.productenSize())
        {
            if(newKassa.getProduct(i).returnNaam().equals(product))
            {
                return i;
            }
            i++;
        }
        return i;
    }
}

Weet er iemand een oplossing???
 
De fout zit 'm in het aanroepen van deze methode
Code:
private void addButton(Container panel, String buttonText)
    {
        JButton button = new JButton(buttonText);
        button.addActionListener(this);
        panel.add(button);
    }
Die roep je als volgt aan
Code:
buttonPanel3.add(product);
Zoals je kunt zien heeft de methode twee parameters, panel en buttonText. Toch geef je er maar 1 mee in de aanroep. De andere krijgt de waarde null en vuurt daarom ook een NullPointerException af. Als je het nou verandert in zoiets zou het goed moeten gaan.
Code:
buttonPanel3.add(product, "tekst");
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan