2011-05-12 10 views
3

이것은 작동하는데 사용되었지만 현재 작동하지 않습니다. 이미지가 스트리밍되는 부분을 변경하지 않았으므로 이것이 작동하지 않는 이유를 모르겠습니다. 여기에 내 코드의 단편이다 :ImageIO.createImageInputStream이 null을 반환합니다. 어떻게해야합니까?

File f = new File(filepath); 
applicantImage=new ImageDetail(filepath); 

Iterator<ImageReader> readers = 
    ImageIO.getImageReadersBySuffix(applicantImage.getFile_extension()); 
ImageReader reader = readers.next(); 

ImageInputStream iis = ImageIO.createImageInputStream(f); 

filepath은 이미지의 절대 파일 경로이며, 이미지는 서버에서 해당 위치를 확인한다. ImageIO.createImageInputStream(f)에 도착할 때까지 모든 것이 훌륭하게 멋지게 작동합니다. 지금은 null입니다. 나는 그것이 파일에서 취하는 javadoc을 읽었다. 이제 null을 돌려주는 이유는 무엇입니까? 누구 알아? 위에 게시 된 코드는 편집시 변경되지 않았으므로 변경 전의 이유와 왜 작동하지 않는지 이해할 수 없습니다. 어떤 도움을 많이 주시면 감사하겠습니다! 감사!

+1

이 전달되는'File' 인스턴스 이 원인이 될 수 있습니다. 'f.exists()'가'true'를 반환하는지 확인하십시오. –

답변

4

File으로 제작 된 InputStream을 사용해보세요.

ImageIO.createImageInputStream(new FileInputStream(f)); 

여기는 관련 example입니다.

부록 : ImageIO.createImageInputStream()에서 더 가까이에서 보면 으로 표시되며 File이 허용됩니다. 실제로 원래 코드가 제 플랫폼 (Mac OS X)에서 작동하므로 null 결과가 플랫폼의 ImageInputStreamSpi 구현과 다를 수 있습니다. 존재하지 않는 File f를 들어,

ImageIO.createImageInputStream(f); 

나는 합리적인 예외를 얻을 :

 
Exception in thread "main" java.lang.IllegalStateException: Input not set! 
    at com.sun.imageio.plugins.gif.GIFImageReader.read(GIFImageReader.java:784) 
    at javax.imageio.ImageReader.read(ImageReader.java:923) 
    at cli.GifBounds.search(GifBounds.java:22) 
    at cli.GifBounds.main(GifBounds.java:14) 
+0

또한'FileInputStream'을'BufferedInputStream'으로 래핑하는 것을 고려하십시오. – trashgod

+2

+1 -'f '가 존재하지 않거나 읽을 수 없다면, 그렇게 말할 예외가 생깁니다. (이 중 아무 것도 null을 반환하고 응용 프로그램에 이유를 말하지 마십시오.) –

+1

+1 FileInputStream이 작동했습니다. 고맙습니다!! – Dana

0

당신은 입력을 설정해야합니다을하기 전에 :

reader.setInput(iis); 
dimension = new Dimension(reader.getWidth(0), reader.getHeight(0)); 
System.out.print(dimension); 
관련 문제