2012-10-22 2 views
1

팩맨 레벨 배경을 표시하는 코드를 실행하는 동안 이미지 및 팩맨 스프라이트가로드되지 않는 문제가 발생합니다.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

원본 폴더에 이미지 폴더와 팩맨 폴더가 있고 이미지에 이미지가 있고 팩맨에 코드가 포함되어 있습니다 – user1766588

+0

이미지가 예상되는 경로에 있는지 확인하기 위해 Jar를 확인 했습니까? –

답변

2

getResourceAsStreamImageIO.read를 호출하려고하지만, 사전에 그 InputStreamnull에 대한 사항을 확인하십시오 여기

그리고

는 클래스입니다. 실제로 null임을 알게 될 것입니다. 이는 해당 URI에서 이미지를 검색 할 수 없음을 의미합니다. org.pacman.Pacman.init에서

+0

getResourceAsStream은 아무 것도 변경하지 않았지만 이미지를 찾을 수 없다는 것을 알고 있지만 인식하도록하는 방법을 모르겠습니다. 자바에서 이미지를로드하는 것이 나의 목표 다. – user1766588

3

(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 질문에 대한 귀하의 의견에 따르면 이미지는 원본 폴더에 있습니다. 내 추측은 그것이 classpath에 없다는 것입니다. 빌드 프로세스에서 이미지 폴더를 클래스 출력 폴더에 복사해야 할 수도 있습니다. –

+0

잘 작동합니다. 경로는 이미지 폴더가 원본에있는 것처럼 정확합니다. – user1766588