0

Hi, first timer here so sorry before hand if I forget to mention something. My code run the window fine but when I hit the calculate button I receive an error message. Firstly this is my code

package Chapter12;

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

public class TheaterGUI extends JFrame {

    JTextField adultTicketPriceTextField;
    JTextField adultTicketSoldTextField; 
    JTextField childTicketPriceTextField;
    JTextField childTicketSoldTextField;

        public TheaterGUI()
    {

    final int windowWidth = 350;
    final int windowHeight = 275;

    setTitle("Theater Revenue ");  
    setSize(windowWidth, windowHeight);
    JButton button = new JButton("Calculate ");
    button.addActionListener(new buttonListener());
    JTextField adultTicketPriceTextField;  
    adultTicketPriceTextField = new JTextField(20);
    JTextField adultTicketSoldTextField;   
    adultTicketSoldTextField = new JTextField(20);
    JTextField childTicketPriceTextField;
    childTicketPriceTextField = new JTextField(20);
    JTextField childTicketSoldTextField;
    childTicketSoldTextField = new JTextField(20);
    JLabel adultPrice;

    adultPrice = new JLabel("Adult Ticket Price:  ");
    JLabel adultSales;
    adultSales = new JLabel ("Adult Tickets Sold:  ");
    JLabel childPrice;
    childPrice = new JLabel ("Child Ticket Price:  ");
    JLabel childSales;
    childSales = new JLabel ("Child Tickets Sold:  ");
    JLabel spacer;
    spacer = new JLabel ("  ");
    JPanel panel1 = new JPanel();
    panel1.add(adultPrice);
    panel1.add(adultTicketPriceTextField);
    panel1.add(adultSales);
    panel1.add(adultTicketSoldTextField);
    panel1.add(childPrice);
    panel1.add(childTicketPriceTextField);
    panel1.add(childSales);
    panel1.add(childTicketSoldTextField);
    panel1.add(spacer);
    panel1.add(button);
    add(panel1);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setVisible(true);

    }

    private class buttonListener implements ActionListener

    {

        @Override
        public void actionPerformed(ActionEvent e)
        {
        String adultTickets;
        double adultTicketsNum;
        String adultSales;
        double adultSalesNum;
        String childTickets;
        double childTicketsNum;
        String childSales;
        double childSalesNum;
        double adultGross;
        double adultNet;
        double childGross;
        double childNet;
        double totalGross;
        double totalNet;
        double constant = 0.20;

        adultTickets = adultTicketPriceTextField.getText();
        adultSales = adultTicketSoldTextField.getText();
        childTickets = childTicketPriceTextField.getText();
        childSales = childTicketSoldTextField.getText();

        adultTicketsNum = Double.parseDouble(adultTickets);
        adultSalesNum = Double.parseDouble(adultTickets);
        childTicketsNum = Double.parseDouble(childTickets);
        childSalesNum = Double.parseDouble(childTickets);

        adultGross = adultTicketsNum * adultSalesNum;
        adultNet = adultGross * constant;
        childGross = childTicketsNum * childSalesNum;
        childNet = childGross * constant;
        totalGross = adultGross + childGross;
        totalNet = adultNet + childNet;

            JOptionPane.showMessageDialog(null, 
                    "The Gross for Adult tickets was " + adultGross + "\n" +
                    " The Net for Adult Tickets was " + adultNet + "\n" +
                    " The Gross for Children Tickets was " +childGross + "\n" +
                    " The Net for Child Tickets was " + childNet + "\n" +
                    " The Total Gross was " + totalGross + "\n" +
                    " The Total Net was " + totalNet);
        }

        }
    public static void main(String[] args){
        new TheaterGUI();
    }
}

The code run fine until line 84 where my error kicks in.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Chapter12.TheaterGUI$buttonListener.actionPerformed(TheaterGUI.java:84)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    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:6533)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Any thoughts, ideas, comments or conserns? Any help is greatly apperciated.

3
Contributors
5
Replies
28
Views
4 Months
Discussion Span
Last Post by JamesCherrill
0

A thought on how to debug. Start at line 100 and comment it out. Does it work? Nope? Comment moving up from line 100 till you find the failing line.

I have to ask, do you use a system that you can single step and watch variables, etc? It may be time to get a bigger boat.

2

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

A null pointer means an unititialised variable (or a return value from a method that returns null)

at Chapter12.TheaterGUI$buttonListener.actionPerformed(TheaterGUI.java:84)

You have the original code, so you know which line that refers to
So check that line to see which variable is null (if in doubt print them all)
Then follow the logic back to see why it;s not initialised.

Edited by JamesCherrill

3

and if you are still stuck... <spoiler alert>

you declare 4 text fields in your main class.
you declare 4 more with the same names as local variables in the constructor. This is not technically an error, but 9 times out of 10 is not what the programmer intended. The constructor initialises the local variables. When the constructor returns, those 4 variables go out of scope and are discarded
in your actionPerformed you try to use the 4 variables from the class, but these were never initialised, so they are null.

If you use a full-scale IDE eg NetBeans, you will see a warning like "Local variable hides a field" when you declare the local variables

Edited by JamesCherrill

0

So i changed the names of the local variables in the constructor(like you said though, thats not the error) so by initalising the texts fields a the beginning in the class the program should run correct? Also yes I am using NetBeans IDE 8.2.

1

No, changing the names of the local variables will still leave the class variables uninitialised!
The mistake is to re-declare those fields/variables in the constructor. You do not want local variables that duplicate variables declared in the class.
Just declare them once, in the class, and use those everywhere, including in the constructor.
You can then initialise them where they are declared in the class, or initialise them in the constructor, whichever you prefer.

Edited by JamesCherrill

Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.