0

Я работаю в Java, и я хотел создать ArrayList из BufferedImages:NullPointerException Ошибка на изображения

ArrayList<BufferedImage> aNoteList = new ArrayList<BufferedImage>(); 

Затем я хочу, чтобы заполнить ArrayList с 197 BufferedImages в конструктор класса DrawPanel.

public DrawPanel(){ 

    for(int i = 0; i < 197; i++){ 
     try { 
      aNoteList.add(ImageIO.read(new File("a.png"))); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    setPreferredSize(new Dimension(400, 600)); 
    panelSize=getPreferredSize(); 
    height=(int) panelSize.getHeight(); 
    width=(int) panelSize.getWidth(); 
    System.out.printf("%d, %d\n",height,width); 
    loadImage();   
} 

Тогда в классе DrawFrame, я создаю объект из класса DrawPanel называется холст. Затем я использую холст.

/*this checks to see if the song is at a specified time and calls the fall method in the DrawPanel class.*/ 

public void checkIfFall() throws IOException{ 
    if(Song.getTime()/1000000000 == (jojo.getaArray()[canvas.getaI()] /1000000000)){ 
      //System.out.println("A Fall"); 
      canvas.fall(canvas.getANoteList().get(canvas.getaI() + 1), canvas.getLocA()); 
      canvas.setaI(canvas.getaI()+1); 
    } 
} 

Я подозреваю, что настоящие проблемы лежат на методе падения, но я не знаю почему.

public void fall(BufferedImage img, Location loc) throws IOException{ 
    if(img != null){ 
    if(img == ImageIO.read(new File("a.png"))) 
     x = 10; 
    if(img == ImageIO.read(new File("s.png"))) 
     x = (width-s.getWidth())/2; 
    if(img == ImageIO.read(new File("d.png"))) 
     x = width-d.getWidth()-20; 
    if(loc.getY()<=height){ 
     System.out.println(img); 
     //offgc.drawImage(img, x, loc.getY(), null); 
     validate(); 
     repaint(); 
     makeMove(movePixel(), loc); 
    } 
    } 
} 

Я получаю NullPointerException, когда я прохожу изображение в метод DrawImage, но я не знаю, почему. Массив заполнен, он сказал, что изображение не равно нулю. Что не так?! Когда я распечатать изображение, я получил это:

[email protected]: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space = [email protected] transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width = 50 height = 50 #numDataElements 4 dataOff[0] = 3 

Означает ли это что-нибудь?

+1

Невозможно, чтобы какой-либо из условий 'img == ImageIO.read (...)' был бы 'истинным', так как' ImageIO.read' возвращает новый объект, и вы сравниваете ссылки. –

+0

Можете ли вы опубликовать источник 'drawImage'? Это метод, который вы написали? –

+0

'Я получаю исключение nullPointerException при передаче изображения в метод drawImage. Где drawImage? Это из класса «Graphics», и если так, то экземпляр «Graphics» null? Если у вас есть исключение, это помогает опубликовать код, в котором происходит исключение, а также полную трассировку стека. – copeg

ответ

0

Поскольку изображение не является нулевым, это может быть только объект Graphics offgc или объект loc, который вы вызываете getY(). Попробуйте распечатать эти два, чтобы узнать, являются ли они пустыми. Также было бы полезно включить полную трассировку стека.

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