Ошибка массива BufferedImages? - PullRequest
1 голос
/ 05 марта 2012
public class DisplayImage extends Panel {

BufferedImage bImg;
static int i = 0; 

public ShowImage() {
    try {
        bImg = ImageIO.read(new File("C:/DesktopPics/pic.jpg"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void paint(Graphics g) {
    g.drawImage(bImg, 0, 0, null);
}

public static void main(String[] args) {

    JFrame frame = new JFrame();
    Panel panel = new DisplayImage();
    frame.getContentPane().add(panel);
    frame.setSize(500, 500);
    frame.setVisible(true);
}

}

Хорошо, я получил приведенный выше код, который, откровенно говоря, прекрасно работает, ОДНАКО, я собирался поместить кучу картинок в массив BufferedImage и нарисовать их одну за другой.Это прекрасно работает, если я создаю несколько BufferedImages, но когда я делаю это:

BufferedImage[] bImg; 

и позже инициализирую его следующим образом

bImg[0] = ImageIO.read(new File("C:/DesktopPics/pic.jpg")); 

Это дает мне такую ​​ошибку:

Exception in thread "main" java.lang.NullPointerException
at ShowImage.<init>(ShowImage.java:17)
at ShowImage.main(ShowImage.java:31)

Я пытался использовать ArrayList, List, даже HashSet, но он не позволил мне создать какой-либо массив / коллекцию для BufferedImage.Почему это?И если это невозможно, есть ли другой способ сохранить коллекцию изображений и отобразить их без получения этих ошибок?

Ответы [ 2 ]

4 голосов
/ 05 марта 2012

Вы создали свой массив bImg? Это не похоже на то, как вы это сделали, поскольку мы видим только объявление переменной, а не ее инициализацию.

То есть, мы видим это:

BufferedImage[] bImg; 

но не это:

BufferedImage[] bImg = new     BufferedImage[MAX_IMG_COUNT]; 

Кроме того, почему вы пытаетесь смешать Swing с компонентами AWT. Обычно это не очень хорошая идея, если у вас нет четких указаний на это (я пока не вижу такого в этом посте) и действительно не знаете, что вы делаете, чтобы избежать обычных ловушек.

3 голосов
/ 05 марта 2012

Массивы требуют, чтобы вы сначала создали экземпляр массива:

int x = 5;
BufferedImage[] bImg = new BufferedImage[x];
bImg[0] = ...
...