2013-08-06 158 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

感謝

相關問題