2012-03-04 31 views
1
public class DisplayImage extends Panel { 

BufferedImage bImg; 
static int i = 0; 

public ShowImage() { 
    try { 
     bImg = ImageIO.read(new File("C:/DesktopPics/pic.jpg")); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public void paint(Graphics g) { 
    g.drawImage(bImg, 0, 0, null); 
} 

public static void main(String[] args) { 

    JFrame frame = new JFrame(); 
    Panel panel = new DisplayImage(); 
    frame.getContentPane().add(panel); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 
} 

} 

好吧,所以我得到了上面的代碼,坦率地說,它的工作原理非常好,但是我的意圖是將一堆圖片放入BufferedImage數組中,然後逐個繪製它們。如果我創建多個BufferedImages這個偉大的工程,但是當我這樣做:BufferedImages數組錯誤?

BufferedImage[] bImg; 

後來初始化像這樣

bImg[0] = ImageIO.read(new File("C:/DesktopPics/pic.jpg")); 

它給我這個錯誤:

Exception in thread "main" java.lang.NullPointerException 
at ShowImage.<init>(ShowImage.java:17) 
at ShowImage.main(ShowImage.java:31) 

我試着使用ArrayList,List,甚至HashSet,但它不會讓我爲BufferedImage創建任何類型的Array/Collection。爲什麼是這樣?如果這是不可能的,是否有另一種方式來存儲圖像集合並顯示它們而不會出現這些錯誤?

回答

4

您是否創建了bImg數組?它看起來不像你所做的那樣,因爲我們只看到變量的聲明而不是初始化它。

即,我們看到:

BufferedImage[] bImg; 

但不是這樣的:

BufferedImage[] bImg = new  BufferedImage[MAX_IMG_COUNT]; 

而且,爲什麼你想與AWT組件混合搖擺。這通常不是一個好主意,除非你有強烈的要求(我在這篇文章中沒有看到一個),並且真的知道你在做什麼,以避免通常的陷阱。

+0

感謝的人,我想我不小心做了,我的意思是使用的JPanel,而不是面板,但最終這樣做,反正出於某種原因,我馬上改變它。除此之外,我正要刺傷自己忘記初始化變量,我怎麼可能忘記了這一點,我一定非常疲憊,但是非常感謝! – ZimZim 2012-03-04 21:01:42

+0

不客氣! – 2012-03-04 22:42:36

3

陣列需要你來實例化數組第一:

int x = 5; 
BufferedImage[] bImg = new BufferedImage[x]; 
bImg[0] = ... 
+0

謝謝你完全忘記實例化變量,謝謝你! – ZimZim 2012-03-04 21:02:21