2013-04-14 96 views
3

我試圖創建我的小盒子,顯示從組合框中選擇顏色。但是當我嘗試運行該程序時,我不斷收到NullPointerException的這個錯誤。我沒有看到它有什麼問題。NullPointerException,殺死我的程序

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

public class ThreeColorsFrame extends JFrame 
{ 
    private static final int FRAME_WIDTH = 300; 
    private static final int FRAME_HEIGHT = 400; 

    private JComboBox box; 
    private JLabel picture; 

    private static String[] filename = { "Red", "Blue", "Green" }; 
    private Icon[] pics = { new ImageIcon(getClass().getResource(filename[0])), 
        new ImageIcon(getClass().getResource(filename[1])), 
        new ImageIcon(getClass().getResource(filename[2])) }; 

    public ThreeColorsFrame() 
    { 
     super("ThreeColorsFrame"); 
     setLayout(new FlowLayout()); 

     box = new JComboBox(filename); 

     box.addItemListener(new ItemListener() 
     { 
      public void itemStateChanged(ItemEvent event) 
      { 
       if (event.getStateChange() == ItemEvent.SELECTED) 
        picture.setIcon(pics[box.getSelectedIndex()]); 
      } 
     }); 

     add(box); 
     picture = new JLabel(pics[0]); 
     add(picture); 

    } 

} 

Exception in thread "main" java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(Unknown Source) 
    at ThreeColorsFrame.<init>(ThreeColorsFrame.java:33) 
    at ThreeColorsViewer.main(ThreeColorsViewer.java:36) 
+0

安置自己的錯誤堆棧跟蹤 –

+0

*「NullPointerException異常,當我嘗試運行該程序」 *複製/粘貼堆棧跟蹤的[編輯該問題](http://stackoverflow.com/posts/15998813/edit)。 –

回答

2

你的問題是你還沒有初始化picture。你有

private JLabel picture; 

但是,這永遠不會設置之前:

picture.setIcon(...); 

被稱爲在構造函數中,雖然一個條件中。

需要初始化它,如

picture = new JLabel(...); // whatever 
+0

我這樣做了底部。 {picture = new JLabel(pics [0]);} –

+0

您需要執行移動代碼,以便在調用方法時不會出現圖片爲null的情況。 – Bohemian

1

您正在使用picture對象已初始化之前。

使用

picture.setIcon(pics[box.getSelectedIndex()]); 

初始化

picture = new JLabel(pics[0]); 

移動監聽器上面的初始化語句。

+0

我試過了,沒有改變。 –

1

我會嘗試初始化picture只要你聲明它。

因此,而不是使用private JLabel picture;嘗試使用:

private JLabel picture = new JLabel(pics[0]);