2016-12-05 8 views
0

配列に複数のイメージをロードしようとしています。しかし、何らかの理由で、実際のロード(ImageIO.read())を試みるときにNullPointerExeptionを取得します。私は何が間違っているのか分かりませんが、おそらくあまりにも多くの間違いを盲目にしています。 これは、イメージをロードしようとするループです:イメージを配列にロードする

for (int i = 0; i <= 1; i++) { 
     try { 
      image[i] = ImageIO.read(new File(String.format("TDs/TD%d.png", i))); 
      bg[i] = ImageIO.read(new File(String.format("BGs/BG%d.png", i))); 
     } catch (IOException e) { 
     } 
    } 

私は現在の間で切り替えるように2つの画像のみを持っているが、私はすぐにそれを変更します。

絵は

g2d.drawImage(bg[1], 0, 0, null); 

両方の変数が

Image[] image, bg; 

によって初期化され、すべての画像が実際にそこに発見されていることを最後のではなく、少なくとも証明されている使用して起こる

here

愚かな人を助けてくれてありがとう。


編集:この方法で配列を初期化するように、ありがとうございます。 他の配列initsを見て、あなたが私に言ったのとまったく同じ方法で初期化されているのを見て、今私はばかげているように感じます...あなたの時間を盗んでしまって申し訳ありません!

PS:これらはゲームのテクスチャなので、IOExeptionsを処理する必要はありません。変更されず、変更もできない/変更しないでください。私は誰かがとにかく混乱することを決めた場合に備えてメッセージボックスを追加します。

+1

また、ioexceptionを処理して無視するだけでなく – XtremeBaumer

答えて

1

新しい配列を作成する必要があります。あなたはこの

試みることができるあなた例えば

Image[] image = new Image[2] // value count 

Image[] image; 

しかし、あなたはそうのようにそれを初期化する必要があり、あなたの配列の要素を格納するために:あなただけそうのような配列を宣言します

int imageCount = 2; 
Image[] image = new Image[imageCount]; 
for (int i = 0; i < imageCount; i++) { 
    try { 
     image[i] = ImageIO.read(new File(String.format("TDs/TD%d.png", i))); 
     bg[i] = ImageIO.read(new File(String.format("BGs/BG%d.png", i))); 
    } catch (IOException e) { 
    } 
} 

または、代わりに、いくつの値を保存したいのか分かります。あなたはArrayListを使うことができます。これと同じように:

Image[] image = new Image[2]; //or replace 2 by the amount of images you will be loading. 
Image[] bg = new Image[2]; //same for this one. 

配列が適切に初期化され、この方法:あなたは画像の配列を初期化している場合

ArrayList<Image> images = new ArrayList<>(); 

//add image 
images.add(ImageIO.read(new File(String.format("TDs/TD%d.png", i)))); 
0

することは、あなたはこのような何かをしようとする場合があります。

関連する問題