I am creating a GUI program with java and when I run it, I get this stack of errors.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at ButtonPanel$AllocateListener.actionPerformed(ButtonPanel.java:52)
	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:6263)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6028)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2475)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

This is the code in my ButtonPanel

import model.*;

import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.*;

public class ButtonPanel extends JPanel implements View
{
    private Prison prison;
    private JButton button = new JButton("Allocate Cell");
    private LeftInputPanel leftInput = new LeftInputPanel(prison);
    private DaysPanel daysPanel;
    private MonthsPanel monthsPanel;
    private YearsPanel yearsPanel;
    private CrimePanel crimePanel;
    private CountPanel countPanel;
    //private AllocateListener listener = new AllocateListener();

    public ButtonPanel(Prison prison)
    {
        this.prison = prison;
        setup();
        build();
    }
    
    public void setup()
    {
    }
    
    public void build()
    {
        Dimension size = new Dimension(240, 70);
        
        button.setPreferredSize(size);
        button.setMinimumSize(size);
        button.setMaximumSize(size);
        button.addActionListener(new AllocateListener());
        add(button);
        update();
    }
    
    public void update()
    {
        leftInput.update();
    }
    
private class AllocateListener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        Criminal criminal = new Criminal(leftInput.name());
        Period period = new Period(daysPanel.days(),  monthsPanel.months(), yearsPanel.years());  //ERROR IN THIS LINE
        criminal.set(new Crime(crimePanel.getCrime()));
        prison.add(criminal);
    }
}
}

DaysPanel

import model.*;
import java.awt.*;
import java.text.*;
import javax.swing.*;

public class DaysPanel extends JPanel
{
    JTextField field = new JTextField();    

    public DaysPanel()
    {
        setup();
        build();
        
    }
    
    public void setup()
    {
          setLayout(new FlowLayout(FlowLayout.LEFT));
        /*Dimension size = new Dimension(75, 20);
        
        setPreferredSize(size);
        setMinimumSize(size);
        setMaximumSize(size);*/
    }
    
    public void build()
    {
        Dimension size = new Dimension(30, 20);
        field.setPreferredSize(size);
        field.setMinimumSize(size);
        field.setMaximumSize(size);

        add(field);
        add(new JLabel(" days"));      
    }
    
    public int days()
    {
        return Integer.parseInt(field.getText());
    }
    
    public void update()
    {
        field.setText("");
    }
}

What's wrong with my code?

The line:

Criminal criminal = new Criminal(leftInput.name());

is trying to access the private variable leftInput which doesn't belong to your class. You only have access to the parameter e in this method.

This article has been dead for over six months. Start a new discussion instead.