2013-04-14 3 views
1
public class BackgroundPanel extends JPanel { 
    File f; 
    BackgroundPanel(File file) { 
     f = file; 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     Image image; 
     try { 
      image = ImageIO.read(f); 
     } 
     catch (IOException e) { 
      image = null; 
     } 
     g.drawImage(image, 0, 0, 850, 1100, this); 
    } 

} 

저는 문제가 너무 어려워서 도움이되지 않기를 바랍니다. 이것은 항상 -specific- 파일에 대한 예외를 throw합니다. 내 Windows 폴더에서 샘플 jpg 중 하나를로드하고 잘로드됩니다. 그러나 jpg는로드 할 필요가 없습니다. 올바른 파일 경로를 사용하고 있고 canRead()를 사용하면 true를 반환합니다. 나는 왜 그것이 로딩되지 않을지 알 수 없다.ImageIO 항상 예외가 발생합니다.

제안 사항?

+0

물론 paintComponent (또는 일반적으로 Swing 이벤트 디스패처 스레드)에서는 I/O를 수행하지 않아야합니다. 그러나 이는 예외의 원인이 아닙니다. 어떤 예외가 있습니까 (stacktrace)? 어쩌면 실패한 샘플 파일을 게시 할 수 있습니까? – haraldK

답변

0

canRead()는 유용하지 않습니다. 왜냐하면 image = ImageIO.read (f); canRead()는 read() 함수에서 호출됩니다. canRead()가 false를 반환하면 IOException이 throw됩니다 ("입력 파일을 읽을 수 없습니다!"); 파일 경로가 정확하지 않은 경우 샘플 jpg와 특정 jpg를 함께 넣어야합니다. probleam이 jpgs 파일에 있다고 생각합니다. 그들은 ImageIO.read()에 의해 jpg로 디코딩되지 않습니다.

관련 문제