2013-05-04 2 views
0

По какой-то причине я получаю ошибку ArrayIndexOutOfBoundsException, я не пытаюсь получить доступ к каким-либо элементам массива, все, что я хочу сделать, это установить размер и передать по ссылке к i.getRGB().ArrayIndexOutOfBoundsException, не обращаясь ни к одному из индексов

/* 
* 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 

ответ

2

For some reason I am getting the ArrayIndexOutOfBoundsException error, I am not trying to access any of the elements of the array, all I want to do is set the size, and pass by reference to the i.getRGB().

Согласно Javadoc для getRGB(...) метода:

"An ArrayOutOfBoundsException may be thrown if the region is not in bounds. However, explicit bounds checking is not guaranteed."


Как дела, за исключением, я думаю, что проблема в том, чтоМассивне достаточно велик, чтобы удерживать область изображения, которое вы пытаетесь извлечь. Нет никакой очевидной корреляции между size и размерами изображения, которое вы читаете. (Но тогда непонятно, что вы на самом деле пытаетесь сделать в методе load ...)

+0

Дело в том, что оно находится в границах, это не значит, что я выхожу из его параметров или чего-то еще. Но что вы пытаетесь сказать, является четкой проверкой, ясно ли изображен массив в границах? –

+0

Я пытаюсь сказать, что это, скорее всего, вызвано предоставлением неверных параметров 'getRGB'. Именно поэтому они неверны, неясно ... и как их исправить зависит от того, что вы на самом деле пытаетесь сделать. (Но вы должны быть в состоянии понять это из чтения javadoc тщательно.) –

+0

Почему изменение 'size' до' long' имеет значение? Это вряд ли будет проблемой. Проблема, скорее всего, ** значение ** вы используете. –

Смежные вопросы