【问题标题】:Java GUI Blank and nullpointerexceptionJava GUI 空白和空指针异常
【发布时间】:2013-03-24 18:54:58
【问题描述】:

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

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

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);
                }
            }
        }
    }

【问题讨论】:

  • 比答案更重要的是学习如何调试 NPE。您将需要检查该行中的变量,找出哪个为空,然后回溯到您的代码以查看它未初始化的原因。

标签: java swing methods nullpointerexception


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    panel = new JPanel();
    

    还有buttonPanel没有初始化:

    buttonPanel = new JPanel();
    

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

    add(panel);
    

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

    【讨论】:

    • JPanel panelName = new JPanel() :)
    【解决方案3】:

    您尚未创建 Panel 对象。

    JPanel panel = new JPanel();
    

    【讨论】:

      【解决方案4】:

      您需要实例化 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);
      
          }
      

      顺便说一句,调用 buildPanel() 并在将可见性设置为 true 之前添加面板。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-09
        相关资源
        最近更新 更多