Java 未在小程序中加载图像

Java 未在小程序中加载图像,java,image,Java,Image,可能重复: 我的所有地面纹理都有一个单独的图像,就像一张精灵纸,但只是垂直的,每次它都会给我第一个块(草)。下面是加载和裁剪图像的代码: for (int i = 0; i < Screen.tileset_ground.length; i++) { URL imgUrl = getClass().getResource("tileset_ground.png"); Screen.tileset_ground[i] = getImage(imgUrl); I

可能重复:

我的所有地面纹理都有一个单独的图像,就像一张精灵纸,但只是垂直的,每次它都会给我第一个块(草)。下面是加载和裁剪图像的代码:

for (int i = 0; i < Screen.tileset_ground.length; i++) {

    URL imgUrl = getClass().getResource("tileset_ground.png");
    Screen.tileset_ground[i] = getImage(imgUrl);


    ImageFilter imgF = new CropImageFilter(0, 26 * i, 26, 26);
    ImageProducer imgP = new FilteredImageSource(Screen.tileset_ground[i].getSource(), imgF);
    Screen.tileset_ground[i] = createImage(imgP);  

}
for(int i=0;i
首先,需要将for循环中的前两行移到它的外部。你只需要做一次这一步

其次,您需要计算出tileset中有多少个tile,并且只迭代那么多次

也许是这样的

URL imgUrl = getClass().getResource("tileset_ground.png");
tileset_image = getImage(imgUrl);

num_images = HOWEVER MANY IMAGES ARE IN THE TILESET

for (int i = 0; i < num_images; i++) {

    ImageFilter imgF = new CropImageFilter(0, 26 * i, 26, 26);
    ImageProducer imgP = new FilteredImageSource(tileset_image.getSource(), imgF);
    Screen.tileset_ground[i] = createImage(imgP);  

}
URL imgUrl=getClass().getResource(“tileset_ground.png”);
tileset_image=getImage(imgUrl);
num_images=瓷砖集中有多少图像
对于(int i=0;i
它在for循环中迭代了多少次?100次,因为我只是随机将tileset_地面阵列设置为100个插槽。如果您的tileset小于100个瓷砖,会发生什么?除非我将其更改为零,因为这样它只能加载一个图像,并且我会得到arryindexoutofbounds异常。显然,我在ImageProducer imgP=new FilteredImageSource(Screen.tileset_ground[I].getSource(),imgF)处得到一个nullpointerexception;我猜这是因为tileset_ground[I]还没有被创建……tileset_图像是做什么的?哎呀,我犯了一个错误。我编辑了我的答案以更改FilteredImageSource行。K它可以工作,非常感谢您的帮助!