0

我修复了这个问题,现在当我点击我的计算按钮时,我得到以下信息:

除了现在的计算按钮之外,这一切都有效,这是最重要的部分。预先感谢大家的帮助。

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

4 回答 4

1

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

于 2013-03-24T18:58:08.763 回答
1

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

panel = new JPanel();

buttonPanel未初始化:

buttonPanel = new JPanel();

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

add(panel);

请注意,Java 命名约定表明变量名以小写字母开头,这将使Panel panel.

于 2013-03-24T18:58:12.813 回答
0

您尚未创建 Panel 对象。

JPanel panel = new JPanel();
于 2013-03-24T18:58:27.110 回答
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() 并添加面板。

于 2013-03-24T19:04:26.253 回答