2013-08-06 206 views
0

所以我试图创建3个面板。第一个面板具有布局设置(例如单选按钮和下一个按钮),现在我添加两个具有不同背景色的新面板。但是当我执行代码时,我得到一个空点异常的错误。我如何解决这个问题?为什么GUI不能正常工作,代码是否正确?

下面是代码:

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

    } 

} 
+1

告诉我们的空指针异常情况发生。哪条线。编辑您的问题以获得异常的完整堆栈跟踪。 –

+0

“*我得到零点异常的错误*” ==>张贴堆栈跟踪,其中包含为例外出现的确切的行... – assylias

+0

这两条线将抛出一个NPE:'panelFirst.setBackground(颜色。蓝色); panelSecond.setBackground(Color.GREEN);'因为没有这些面板已经被实例化... – assylias

回答

2

panelFirstpanelSecond变量为null,则没有声明。

设置面板的背景之前,你需要创建它:

panelFirst= new JPanel(); 

与panelSecond同样的事情:

panelSecond = new JPanel(); 

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

3

panelFirstpanelSecond永远不会创建对象。

4

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

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

所以,我抬起头,产生它的线,在构造函数向导:

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

感谢

相关问题