2012-03-04 4 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配列に入れて、それらを1つずつ描くことでした。私は複数のBufferedImageを作成する場合、これは素晴らしい作品が、私はこれを行うとき:このBufferedImagesの配列にエラーがありますか?

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

のようにそれを初期化し

BufferedImage[] bImg; 

以降にそれは私に、このエラーを与える:

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

+0

あなたは大歓迎です! –

3

配列は最初の配列をインスタンス化する必要が:

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

ありがとう、男は完全に変数をインスタンス化するのを忘れてしまった、おかげで束! – ZimZim

関連する問題