2013-03-24 2 views
0

Я установил, что теперь, когда я нажимаю на моей кнопке рассчитайте я получаю следующее:Java GUI Blank и 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); 
       } 
      } 
     } 
    } 
+0

Более важным, чем ответ, является научиться отлаживать NPE. Вам нужно будет проверить переменные в строке, узнать, какой из них является нулевым, а затем вернуться в свой код, чтобы узнать, почему он не был инициализирован. –

ответ

1

Я думаю, что ваш buttonPanel - null. Но вы можете просто отлаживать свою строку кода по строке, чтобы выяснить, какая из них равна нулю.

1

Вы не создаете экземпляр Panel в любом месте. В buildPanel вы можете добавить:

panel = new JPanel(); 

Также buttonPanel не инициализирован:

buttonPanel = new JPanel(); 

Панель затем должна быть добавлена ​​к вашему JFrame:

add(panel); 

Примечание, Java соглашения об именах показывают, что имена переменных начинаются с в нижнем регистре письмо, которое сделает Panelpanel.

+1

'JPanel panelName = new JPanel()' :) –

+1

Почему downvote? – Reimeus

0

Вы не создали объект Panel.

JPanel panel = new JPanel(); 
0

Необходимо создать экземпляр панели и 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); 

    } 

Btw call buildPanel() и добавьте панель, прежде чем установить видимость на значение true.