将图像加载到数组中

时间:2016-12-05 13:51:07

标签: java arrays image graphics

我正在尝试将多个图像加载到数组中。但由于某种原因,我在尝试进行实际加载时得到了NullPointerExeption(ImageIO.read())。我看不出什么是错的,可能是因为过多地摆弄它而导致我对这个错误视而不见。 这是尝试加载图像的循环:

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) {
        }
    }

我目前只有两张图片可以切换,但我很快就会改变。

使用

进行绘画
g2d.drawImage(bg[1], 0, 0, null);

两个变量都由

初始化
Image[] image, bg;

最后但并非最不重要的证明所有图像实际上都是找到的

here

感谢帮助一个愚蠢的人。


编辑:谢谢你的答案,因为这种方式初始化数组的工作原理! 我现在觉得自己像个白痴,因为我查看了所有其他阵列的内容,发现它们的初始化方式与你告诉我的完全相同...抱歉偷了你的时间!

PS:不需要处理IOExeptions,因为这些是游戏的纹理 - 它们不会改变,你也不能/不应该改变它们。我将添加一个带有消息的消息框,以防有人决定乱七八糟。

2 个答案:

答案 0 :(得分:1)

您需要创建一个新数组。您只需像这样声明数组:

Image[] image;

但是要在数组中存储元素,你必须像这样初始化它:

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

对于您的示例,您可以尝试这个

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。像这样:

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

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

答案 1 :(得分:0)

初始化图像数组时,您可能希望尝试执行以下操作:

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.

这样就可以正确初始化数组。