Java GUI Blank和nullpointerexception

时间:2013-03-24 18:54:59

标签: java swing methods nullpointerexception

我修复了现在,当我点击我的计算按钮时,我得到以下内容:

现在除了计算按钮之外,这一切都正常工作,这是最重要的部分。提前感谢大家的帮助。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Radio$CalcButtonListener.actionPerformed(Radio.java:76)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)






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




    public class Radio extends JFrame 
    {

        private JPanel Panel;
        private JPanel buttonPanel;
        private JTextField base;
        private JTextField width;
        private JRadioButton squareArea;
        private JRadioButton parallelogramArea;
        private final int WINDOW_WIDTH = 550;
        private final int WINDOW_HEIGHT = 550;
        double pTotal;
        double sTotal;

        public Radio()
        {
            setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
            setTitle("Area Calculator");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
            buildPanel();
            add(Panel);

        }


        private void buildPanel() 
        {    
            Panel = new JPanel();
            JLabel messageLabel1 = new JLabel("Please enter the base: ");
            JTextField base = new JTextField(10);
            JLabel messageLabel2 = new JLabel("Please enter the width: ");
            JTextField width = new JTextField(10);
            JRadioButton squareArea = new JRadioButton("Choice 1", true);
            JRadioButton parallelogramArea = new JRadioButton("Choice 2");
            ButtonGroup group = new ButtonGroup();
            JButton calcButton = new JButton("Calculate");
            calcButton.setBackground(Color.BLUE);
            calcButton.setForeground(Color.PINK);
            calcButton.addActionListener(new CalcButtonListener());
            Panel.add(messageLabel1);
            Panel.add(base);
            Panel.add(messageLabel2);
            Panel.add(width);
            group.add(squareArea);
            group.add(parallelogramArea);
            Panel.add(squareArea);
            Panel.add(parallelogramArea);
            Panel.add(calcButton);
        }




        public static void main (String[] args)
        {

            Radio radio = new Radio();
            radio.buildPanel();
        }

        private class CalcButtonListener implements ActionListener
        {

            public void actionPerformed(ActionEvent e) 
            {


                if (parallelogramArea.isSelected());
                {
                    pTotal = Double.parseDouble(base.getText()) * Double.parseDouble(width.getText());
                    JOptionPane.showMessageDialog(null, "The Area is: " + pTotal);
                }


                if (squareArea.isSelected())
                {

                     sTotal = Double.parseDouble(base.getText()) * Double.parseDouble(width.getText());
                     JOptionPane.showMessageDialog(null, "The Area is: " + sTotal);
                }
            }
        }
    }

4 个答案:

答案 0 :(得分:1)

我认为您的buttonPanel为空。但你可以调试你的代码行 - 逐行找出哪些是空的

答案 1 :(得分:1)

您不会在任何地方实例化Panel。在buildPanel中,您可以添加:

panel = new JPanel();

buttonPanel也未初始化:

buttonPanel = new JPanel();

然后需要将该面板添加到您的JFrame

add(panel);

注意,Java命名约定显示变量名称以小写字母开头,这将使Panel panel

答案 2 :(得分:0)

您尚未创建Panel的对象。

JPanel panel = new JPanel();

答案 3 :(得分:0)

您需要实例化Panel和buttonPanel。您可以在构造函数中执行此操作。

    public Radio(){

        Panel = new JPanel();
        buttonPanel = new JPanel();
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setTitle("Area Calculator");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        buildPanel();
        add(Panel);
        setVisible(true);

    }

在将可见性设置为true之前,请先调用buildPanel()并添加面板。