2011-11-29 2 views
1

기본적으로 나는 JFrame 클래스에서 상속하고 자체 메서드가있는 GUI가 있습니다.JFrame GUI 프로그램이 런타임 오류를 발생시키는 이유는 무엇입니까?

그것은 다음 오류를

Exception in thread "main" java.lang.NullPointerException 
    at MilesPerGallonApp.buildPanel(MilesPerGallonApp.java:33) 
    at MilesPerGallonApp.<init>(MilesPerGallonApp.java:20) 
    at MilesPerGallonApp.main(MilesPerGallonApp.java:58) 

을 제공 내 모든 변수가 제대로 선언 된 것을 확인

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

public class MilesPerGallonApp extends JFrame 
{ 
    private JPanel panel; 
    private JLabel messageLabel1; 
    private JLabel messageLabel2; 
    private JTextField distanceTextField; 
    private JTextField gallonTextField; 
    private JButton calcButton; 
    private final int WINDOW_WIDTH = 500; 
    private final int WINDOW_HEIGHT = 280; 

    public MilesPerGallonApp() 
    { 
     super("Fuel Economy Calculator"); 
     setSize(WINDOW_WIDTH, WINDOW_HEIGHT); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     buildPanel(); 
     add(panel); 
     setVisible(true); 
    } 

    private void buildPanel() 
    { 
     messageLabel1 = new JLabel("Enter maximum distance."); 
     messageLabel2 = new JLabel("Enter tank capacity."); 
     distanceTextField = new JTextField(8); 
     gallonTextField = new JTextField(4); 
     calcButton = new JButton("Calculate MPG"); 

     panel.add(messageLabel1); 
     panel.add(messageLabel2); 
     panel.add(distanceTextField); 
     panel.add(calcButton); 
    } 

    private class CalcButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      String gallonString; 
      String milesString; 
      double MPG; 

      gallonString = gallonTextField.getText(); 
      milesString = distanceTextField.getText(); 

      MPG = Double.parseDouble(milesString)/Double.parseDouble(gallonString); 

      JOptionPane.showMessageDialog(null, "The fuel economy is " + MPG + " miles per gallon."); 
     } 
    } 

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

소스 코드를입니다. 정확히 무엇이 잘못되었는지 나는 잘 모르겠습니다. 디버깅의 전문가가 더 많은 사람이 도움을 줄 수 있습니까?

감사합니다. panel가 null로, 당신이 그것을 (panel.add(messageLabel1);)의 일부 메서드를 호출하려고

+0

언제 NullPointerException이 발생합니까? – gprathour

답변

7

때문에, 당신은 그것을 초기화해야합니다 당신은 당신의 빌드 패널 코드

panel = new JPanel(); 

누락

private JPanel panel = new JPanel(); 
3

. 또한 여러 요소를 추가하기 위해 레이아웃을 변경해야합니다.

관련 문제