2014-09-01 3 views
0

Я связал файл, который я хочу загрузить, и когда я отлаживаю, конструктор SpriteSheet показывает, что переменная пути хранит указанный мной путь. Когда он пытается запустить строку кода image = ImageIO.read(SpriteSheet.class.getResourceAsStream(path));, он выходит из строя с помощью исключения незаконного аргумента. Единственное, что я могу ошибаться, это то, что указанный мной файл не загружается, но я понятия не имею, почему.Недопустимый аргумент Исключение при попытке загрузить лист спрайта

класс

игры:

package com.swainchris.twodgame; 

import java.awt.BorderLayout; 
import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.image.BufferStrategy; 
import java.awt.image.BufferedImage; 
import java.awt.image.DataBufferInt; 

import javax.swing.JFrame; 

import com.swainchris.twodgame.gfx.SpriteSheet; 

public class Game extends Canvas implements Runnable { 

private static final long serialVersionUID = 1L; 
public static final int WIDTH = 160; 
public static final int HEIGHT = WIDTH/12 * 9; 
public static final int SCALE = 3; 
public static final String NAME = "2D Game"; 
public static boolean running = false; 
private JFrame frame; 
public int tickCount = 0; 

private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); 
private int[] pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData(); 

private SpriteSheet spriteSheet = new SpriteSheet("/SS.png"); 

public Game() { 
    setMinimumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE)); 
    setMaximumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE)); 
    setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE)); 

    frame = new JFrame(NAME); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(new BorderLayout()); 
    frame.add(this, BorderLayout.CENTER); 
    frame.pack(); 
    frame.setResizable(false); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 


public synchronized void start() { 
    running = true; 
    new Thread(this).start(); 

} 



public synchronized void stop() { 
    running = false; 
} 



public void tick(){ 
    tickCount++; 

    for(int i = 0; i < pixels.length; i++){ 
     pixels[i] = i - tickCount; 
    } 
} 



public void render(){ 
    BufferStrategy bs = getBufferStrategy(); 
    if(bs==null){ 
     createBufferStrategy(3); 
     return; 
    } 

    Graphics g = bs.getDrawGraphics(); 


    g.drawImage(image,0,0,getWidth(),getHeight(),null); 

    g.setColor(Color.BLACK); 
    g.fillOval(50,50,50,50); 

    g.dispose(); 
    bs.show(); 
} 


public void run() { 

    long lastTime = System.nanoTime(); 
    double nsPerTick = 1000000000D/60D; 
    int ticks = 0; 
    int frames = 0; 
    long lastTimer = System.currentTimeMillis(); 
    double delta = 0; 

    while(running){ 

     long now = System.nanoTime(); 
     delta += (now - lastTime)/nsPerTick; 
     lastTime = now; 
     boolean shouldRender = true; 

     while(delta >= 1){ 
      ticks++; 
      tick(); 
      delta--; 
     } 

     try { 
      Thread.sleep(1); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     if(shouldRender){ 
     frames++; 
     render(); 
     } 


     if(System.currentTimeMillis() - lastTimer >= 1000){ 
      lastTimer += 1000; 
      frame.setTitle("2D Game! FPS: " + frames + " UPS: " + ticks); 
      frames = 0; 
      ticks = 0; 
     } 
    } 
} 

public static void main(String[] args) { 

    new Game().start(); 

} 

}

SpriteSheet класс:

package com.swainchris.twodgame.gfx; 

import java.awt.image.BufferedImage; 
import java.io.IOException; 

import javax.imageio.ImageIO; 

public class SpriteSheet { 

public String path; 
public int width; 
public int height; 

public int[] pixels; 

public SpriteSheet(String path){ 
    BufferedImage image = null; 

    try { 
     image = ImageIO.read(SpriteSheet.class.getResourceAsStream(path)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    if(image == null){ 
     return; 
    } 

    this.path = path; 
    this.width = image.getWidth(); 
    this.height = image.getHeight(); 

    pixels = image.getRGB(0,0,width,height,null,0,width); 

    for(int i = 0; i < pixels.length; i++){ 
     pixels[i] = (pixels[i] & 0xff)/64; 
    } 

    for(int i = 0; i<8; i++){ 
     System.out.println(pixels[i]); 
    } 
} 

} 

Ошибка:

Exception in thread "main" java.lang.IllegalArgumentException: input == null! 
at javax.imageio.ImageIO.read(Unknown Source) 
at com.swainchris.twodgame.gfx.SpriteSheet.<init>(SpriteSheet.java:20) 
at com.swainchris.twodgame.Game.<init>(Game.java:30) 
at com.swainchris.twodgame.Game.main(Game.java:137) 
+0

у вас есть файл /SS.png? в вашем корне? – ths

+0

@speising да я на самом деле делаю. – Krzysztof

ответ

0

Работы сейчас, все, что я делал, было скопировать весь код новый файл проекта. Ничего не изменило, кроме названия проекта. Не знаю, почему это сработало, но это произошло.

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