2011-02-26 21 views
5

Hola a todos, Siempre que trato de obtener un objeto utilizando ImageInputStreamImageIO.createImageInputStream simplemente devuelve null sin excepciones, advertencias o errores. He intentado pasar diferentes tipos de datos a la función, un simple File, y un InputStream, pero ambos devolvieron null también. La documentación dice que si no se encuentra ImageInputStreamSpi adecuado, la función devolverá null, pero el archivo es un JPEG estándar de pantano, y seguramente Java viene con un proveedor de servicios para dicho formato de fábrica. Gracias por su tiempo.ImageIO.createImageInputStream sigue volviendo nula

/** 
* 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

bien limpia su código y que lo ponga aquí para que podamos ayudar a :) – FearUs

+0

Excepto, que no ha respondido a mi pregunta, se me acaba de dar una solución diferente, que estaba ya estoy usando antes, como se detalla a continuación ... Mi pregunta original, con la que todavía estoy teniendo problemas, aún no ha sido respondida ... –

+0

Tengo el mismo problema. Por algún motivo, funciona en MacOSX 1.6 desde Eclipse, pero falla en la producción, que es un entorno Debian Linux. Mi aplicación es una aplicación basada en OSGI basada en el contenedor de servlets Equinox y Jetty. de todo lo que leí hasta ahora parece estar relacionado con JAI y OSGI (http://stackoverflow.com/questions/1493199/running-jai-in-osgi). Pero aún no lo he resuelto. – Christoph

Respuesta

3

¿Por qué estás haciendo todo eso? simplemente puede hacer esto:

image = ImageIO.read(source); 

Sin Iterators, ImageInputStreams ... nada de nada!

EDITAR: Ya que insistes, su código no está funcionando porque va a enviar una File-ImageIO.getImageReaders() en lugar de un ImageInputStream. Por lo que su código debería ser algo así:

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

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

Estaba usando 'ImageIO.read' originalmente, pero para archivos grandes, en lugar de simplemente detener cuando se estaba leyendo una imagen grande, quería agregar la funcionalidad para agregar observadores a mi' ImageReader' para rastrear la cantidad de archivo que tenía sido leído –

+0

De acuerdo, edité mi código según lo que describió, pero el mismo problema persiste; 'ImageIO.createImageInputStream' solo devuelve' null' en lugar de 'ImageInputStream', por lo que está activando una' IllegalArgumentException' en 'ImageIO.getImageReaders' en lugar de' ImageReader :: setInput'. –

+0

Desde los Javadocs de 'ImageIO.createImageInputStream (Entrada de objeto)' dice que "la entrada debe ser un Objeto que se utilizará como fuente de entrada, como un Archivo, RandomAccessFile legible o InputStream". Este método arroja una 'IllegalArgumentException' si la entrada es' null'! Así que asegúrese de no pasar nulo en el parámetro 'fuente'. – FearUs