0

所以我试图创建 3 个面板。第一个面板具有布局集(例如单选按钮和下一个按钮) 我现在添加两个具有不同背景颜色的新面板。但是当我执行代码时,我得到一个空点异常的错误。我该如何解决?

这是代码:

import java.awt.Color;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.CardLayout;
import javax.swing.*;

public class Wizard {

private JLabel lblPicture;
private JRadioButton btLdap, btKerbegos, btSpnego, btSaml2;
private JButton btNext;
private JPanel panel;
private JPanel panelFirst;
private JPanel panelSecond;
CardLayout c1 = new CardLayout();

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

    public Wizard() {

        JFrame frame = new JFrame("Wizard");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600,360);
        frame.setVisible(true);
        MyPanel();
        RadioButtons();
        Button();
        Image();
        groupButton();
        panel.setLayout(c1);
        panelFirst.setBackground(Color.BLUE);
        panelSecond.setBackground(Color.GREEN);
        panel.add(panelFirst,"1");
        panel.add(panelSecond,"2");
        c1.show(panel,"panel");
        frame.add(panel); 
        frame.pack();
        frame.setVisible(true);
    }

    public void MyPanel() {
        panel = new JPanel();
        panel.setLayout(null);
    }

    public void RadioButtons() {
        btLdap = new JRadioButton ("Ldap");
        btLdap.setBounds(60,85,100,20);
        panel.add(btLdap);

        btKerbegos = new JRadioButton ("Kerbegos");
        btKerbegos.setBounds(60,115,100,20);
        panel.add(btKerbegos);

        btSpnego =new JRadioButton("Spnego");
        btSpnego.setBounds(60,145,100,20);
        panel.add(btSpnego);

        btSaml2 = new JRadioButton("Saml2");
        btSaml2.setBounds(60,175,100,20);
        panel.add(btSaml2);
    }

    public void Button() {
        btNext = new JButton ("Next");
        btNext.setBounds(400,260,100,20);
        panel.add(btNext);
        btNext.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    c1.show(panel, "2");
                }
            });
    }

    public void Image() {
        ImageIcon image = new ImageIcon("image.jpg");
        lblPicture = new JLabel(image);
        lblPicture.setBounds(200,20, 330, 270);
        panel.add(lblPicture);
    }

    private void groupButton() {

        ButtonGroup bg1 = new ButtonGroup( );

        bg1.add(btLdap);
        bg1.add(btKerbegos);
        bg1.add(btSpnego);
        bg1.add(btSaml2);

    }

}
4

3 回答 3

4

当我去运行你的代码时,我得到了你提到的空指针异常:

Exception in thread "main" java.lang.NullPointerException
    at Wizard.<init>(Wizard.java:35)
    at Wizard.main(Wizard.java:20)

因此,我在 Wizard 的构造函数中查找了生成它的行:

panelFirst.setBackground(Color.BLUE);

我看到您在 panelFirst 上设置了一个属性,它是 Wizard 类的实例数据成员。

我没有看到您声明的任何地方panelFirst = new JPanel();,这就是您创建 NullPointerException 的原因。看起来您还没有初始化许多其他变量(例如,panel我看到的唯一一个已初始化的 JPanel)。

请在 Java API 中查找 JPanel 的构造函数,看看你想如何为你的应用程序创建它们。您也可以考虑使用 IDE 为您生成 GUI 代码。

JPanel API(从 jdk 1.7 开始):http ://docs.oracle.com/javase/7/docs/api/javax/swing/JPanel.html

谢谢

于 2013-08-06T23:24:13.550 回答
3

panelFirst并且panelSecond永远不会创建对象。

于 2013-08-06T23:20:34.957 回答
2

panelFirst并且panelSecond变量为 null 它未声明。

在设置面板背景之前,您需要创建它:

panelFirst= new JPanel();

与 panelSecond 相同:

panelSecond = new JPanel();

当您遇到空指针异常(也称为 NPE)时:您应该尝试查找uninitialized variable. 当一个变量被声明但未初始化时,它的指针指向空(即它是一个空指针!)

于 2013-08-06T23:14:39.700 回答