1

何らかの理由で、ArrayIndexOutOfBoundsException エラーが発生しています。配列の要素にアクセスしようとはしていません。必要なのは、サイズを設定し、i.getRGB() への参照渡しだけです。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Logic;

import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
 *
 * @author Steven, even(RageZone), Zingzags(PokeCommunity)
 */
public class SpriteSheet {

    private String path;
    private final int size;
    private int[] pixels;

    public static SpriteSheet tiles = new SpriteSheet("/Tilesets/Outside.png", 256);

    public SpriteSheet(String path, int size){
        this.path = path;
        this.size = size;
        pixels = new int[this.size * this.size];
        load();
    }

    public int getPixels(int params){
       return pixels[params];
    }

    public int getSize(){
        return size;
    }

    public int[] getPixels(){
        return pixels;
    }

    private void load(){
        try{
            BufferedImage im = ImageIO.read(SpriteSheet.class.getResource(path));
            int w = im.getWidth();
            int h = im.getHeight();
            im.getRGB(0, 0, w, h, pixels, 0, w);
        } catch(IOException ex){
            ex.printStackTrace();
        }
    }
}

エラー:

    Exception in thread "Display" java.lang.ExceptionInInitializerError
    at Logic.Sprite.<clinit>(Sprite.java:16)
    at Logic.Screen.render(Screen.java:46)
    at game.Game.render(Game.java:82)
    at game.Game.run(Game.java:109)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 65536
    at java.awt.image.BufferedImage.getRGB(BufferedImage.java:958)
    at Logic.SpriteSheet.load(SpriteSheet.java:47)
    at Logic.SpriteSheet.<init>(SpriteSheet.java:27)
    at Logic.SpriteSheet.<clinit>(SpriteSheet.java:21)
    ... 5 more
4

1 に答える 1

2

何らかの理由で、ArrayIndexOutOfBoundsException エラーが発生しています。配列の要素にアクセスしようとしていません。サイズを設定し、i.getRGB() への参照渡しだけを行います。

メソッドのjavadocによるとgetRGB(...)

「領域が境界内にない場合、ArrayOutOfBoundsException がスローされる可能性があります。ただし、明示的な境界チェックは保証されません。」


pixels例外の原因については、配列が抽出しようとしている画像の領域を保持するのに十分な大きさではないことが問題だと思います。sizeと、読み取っている画像のサイズの間に明確な相関関係はありません。(しかし、そのメソッドで実際に何をしようとしているのかは明確ではありませんload...)

于 2013-05-04T02:11:43.177 に答える