2012-03-04 63 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