Почему моя программа с графическим интерфейсом JFrame выдает ошибку времени выполнения? - PullRequest
1 голос
/ 29 ноября 2011

В основном у меня есть графический интерфейс, который наследуется от класса JFrame и имеет собственный метод main .

Он выдает ошибку

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

Я проверил, что все мои переменные были объявлены правильно.Я не уверен, что именно не так.Может ли кто-нибудь, кто больше разбирается в отладке, помочь?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 29 ноября 2011

Поскольку panel имеет значение null и вы пытаетесь вызвать некоторые его методы (panel.add(messageLabel1);), вам необходимо инициализировать его:

private JPanel panel = new JPanel();
3 голосов
/ 29 ноября 2011

Вам не хватает

  panel = new JPanel();

в коде панели сборки.Более того, вам нужно изменить его макет, чтобы добавить несколько элементов.

...