2011-02-26 8 views
5

tüm Hey Ben sadece hiçbir istisna, uyarılar ve hatalar ile null döndürür ImageIO.createImageInputStream kullanarak ImageInputStream nesneyi elde etmeye çalışmak zaman. Farklı veri türlerini işleve, basit bir File ve bir InputStream geçirmeyi denedim, ancak her ikisi de null'u döndürdü. Belgeler, uygun ImageInputStreamSpi bulunamazsa, fonksiyonun null geri döneceğini, ancak dosyanın standart bir JPEG olduğunu ve kesinlikle Java'nın böyle bir format için servis sağlayıcısıyla birlikte geldiğini söylüyor. Zaman ayırdığınız için teşekkür ederiz.ImageIO.createImageInputStream dönen tutar boş

/** 
* Reads in an image from a file and returns the image in a 
* {@code BufferedImage} object. 
* 
* @param source the file to create the {@code BufferedImage} 
* from. 
* @return the {@code BufferedImage} object representing the image 
* in {@code source}. 
*/ 
private BufferedImage readImage(File source) { 
    // There is only one image in this file 
    final int imageIndex = 0; 
    BufferedImage image = null; 

    try { 
     // Get the ImageReader object for this filetype 
     Iterator readers = 
      ImageIO.getImageReaders(source); 
     ImageReader reader = (ImageReader) readers.next(); 

     // Create an ImageInputStream object from the source image file 
     ImageInputStream iis = ImageIO.createImageInputStream(source); 
     // Raises IllegalArgumentException, because iis is null 
     reader.setInput(iis, true); 

     // Read the image file 
     image = reader.read(imageIndex); 
    } catch (Exception exception) { 
     exception.printStackTrace(); 
     System.exit(-1); 
    } 

    return image; 
} 
+0

iyi temiz kod ve burada yazılan bu yüzden soruma cevap vermedi hariç :) – FearUs

+0

yardımcı olabilir, sadece bana oldu, farklı bir çözüm verdi zaten aşağıda, aşağıda açıklandığı gibi ... Hala sorun yaşıyorum orijinal sorum, hala cevapsızdır ... –

+0

Ben de aynı sorun var. Bazı nedenlerden dolayı MacOSX 1.6'da Eclipse'den çalışıyor ancak debian linux ortamı olan üretimde başarısız oluyor. Benim app Equinox ve Jetty servlet konteyner üzerine inşa edilmiş bir OSGI tabanlı webapp. Şimdiye kadar okudum her şeyden JAI ve OSGI (http://stackoverflow.com/questions/1493199/running-jai-in-osgi) ile ilgili gibi görünüyor. Ama henüz çözmedim. – Christoph

cevap

3

Neden bunu yapıyorsun? sadece bunu yapabilirsiniz:

image = ImageIO.read(source); 

Hayır Iterators, ImageInputStreams ... hayır hiçbir şey!

DÜZENLEME: eğer ısrar beri bir ImageInputStream yerine FileImageIO.getImageReaders() gönderiyorsanız, çünkü kod çalışmıyor. SO kodunuzu böyle bir şey görünmelidir:

ImageInputStream iis = ImageIO.createImageInputStream(source); 
Iterator readers = ImageIO.getImageReaders(iis); 
ImageReader reader = (ImageReader) readers.next(); 

reader.setInput(iis, false); 
image = reader.read(imageIndex); 
+0

Orijinal olarak ImageIO.read'i kullanıyordum, ancak büyük dosyalar için, sadece büyük bir resim okunurken durmak yerine, görüntüleyicinin dosya ne kadarının olduğunu izlemek için “ImageReader” cihazına gözlemci eklemek için işlevsellik eklemek istedim. okundu. –

+0

Tamam, kodumun özetlediğinizi düzenledim, ancak aynı sorun hala devam ediyor; ImageIO.createImageInputStream işlevi, geçerli bir "ImageInputStream" yerine "null" değerini döndürür, bu yüzden "ImageReader :: setInput" yerine ImageIO.getImageReaders öğesinde bir "IllegalArgumentException" öğesi başlatılır. –

+0

"ImageIO.createImageInputStream (Nesne girişi)" nin Javadocs'undan "girdi, Dosya, okunabilir bir RandomAccessFile veya InputStream" gibi bir giriş kaynağı olarak kullanılacak bir nesne olmalıdır. Bu yöntem 'null' ise 'IllegalArgumentException' atar! Bu yüzden, 'source' parametresinde boş değer geçmediğinizden emin olun. – FearUs