2012-10-22 48 views
1

雖然運行代碼來顯示pacman級別的背景,但我遇到了圖像和pacman sprite未加載的問題。Java ImageIO異常

例外:

Exception in thread "Thread-2" java.lang.IllegalArgumentException: input == null! 
    at javax.imageio.ImageIO.read(ImageIO.java:1388) 
    at org.pacman.Pacman.init(Pacman.java:51) 
    at org.game.engine.GameLoop.run(GameLoop.java:26) 

線GameLoop 26是簡單地game.init();

這裏是類:

public class Pacman extends Game { 

    public static void main(String[] args) { 
     GameApplication.start(new Pacman()); 
    } 

    private BufferedImage sheet; 
    private int frame; 

    public Pacman() { 
     title = "Pacman"; 
     width = 176; 
     height = 258; 
     frame = 0; 
    } 

    @Override 
    public void draw(Graphics g) { 
     if (sheet != null) { 
      g.drawImage(sheet, -2, 0, null); 
      //draw ms pacman 
      g.drawImage(sheet.getSubimage(628+(frame/3)*(15+2), 33, 15, 15), 80, 105, null); 
     } 
    } 

    @Override 
    public void init() { 
     try { 
      sheet = ImageIO.read(Pacman.class.getResource("/images/pacman.png")); 
     } catch (IOException ex) { 
      Logger.getLogger(Pacman.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    @Override 
    public void update() { 
     frame++; 
     if (frame > 3*2) { 
      frame = 0; 
     } 
    } 
} 
+2

你的'pacman.png'的路徑是否正確,或者你需要放棄領先的'/'? – RobEarl

+0

在源文件夾中我有一個圖像文件夾和一個pacman文件夾,圖像包含圖像,並且pacman包含代碼 – user1766588

+0

您是否檢查過Jar以確保圖像在您期望的路徑中? –

回答

2

嘗試調用ImageIO.readgetResourceAsStream,但檢查InputStreamnull提前。你會發現它確實是null。這意味着無法在該URI處檢索圖像。

+0

getResourceAsStream沒有改變任何東西,我知道它找不到我的圖像,但我不知道如何讓它識別它。在java中加載圖像是我的禍根。 – user1766588

3

在org.pacman.Pacman.init(Pacman.java:51)

所以看線51:

sheet = ImageIO.read(Pacman.class.getResource("/images/pacman.png")); 

所以Pacman.class.getResource("/images/pacman.png")null,所以它看起來像它的不加載圖像。

+0

是的,這也是我注意到的,我改變了位置並在那裏嘗試,我也嘗試命名圖像pacman.png(實際上是pacman.png.png)。但仍然沒有運氣 – user1766588

+1

@ user1766588根據您對該問題的評論,該圖片位於源文件夾中。我的猜測是它不在類路徑中。您可能需要使您的構建過程將圖像文件夾複製到類輸出文件夾。 –

+0

工作正常,路徑也是正確的,因爲圖像文件夾是在源 – user1766588