ImageIO.createImageInputStream在可运行的jar中不起作用

时间:2019-11-11 19:02:19

标签: java

我正在尝试拆分多页纸,而我正在使用ImageIo。在Eclipse中,我的代码工作正常,但是当我导出到runnabe .jar时,它不起作用,并且没有异常返回。它简单地停止工作并关闭。

我已经尝试使用JAI编码和解码,但是很多图像只是返回了“不支持的压缩类型”的异常,因此我决定使用ImageIo.read和ImageIo.createImageInputStream分割我的tiff文件,至少在Eclipse中,它可以完美运行。仅当我将类导出为可运行的jar时,才会出现此问题。

我也尝试过使用myClass.class.getResourceAsStream(tiff.getPath()),尝试过myClass.class.getResourcesStream(“ / Images /” + tiff.getName()),但始终返回null ...我真的陷在这个问题中...

private static List<BufferedImage> splitTiff(File tiff) throws IOException {

        List<BufferedImage> images = new ArrayList<BufferedImage>();
        InputStream in = new FileInputStream(tiff.getAbsolutePath());
        try {   
            logger.info(" -- Creating ImageInputStream.");      
            ImageInputStream is = ImageIO.createImageInputStream(in);
            logger.info(" -- ImageInputStream created.");
            if (is == null || is.length() == 0) {
                logger.info(" -- Input error. ");
                throw new IOException("Image file format not supported by ImageIO: " + tiff.getAbsolutePath());
            }

            Iterator<ImageReader> iterator = ImageIO.getImageReaders(is);
            if (iterator == null || !iterator.hasNext()) {
                throw new IOException("Image file format not supported by ImageIO: " + tiff.getAbsolutePath());
            }
            // We are just looking for the first reader compatible:
            ImageReader reader = (ImageReader) iterator.next();
            iterator = null;
            reader.setInput(is);

            for (int i = 0; i < reader.getNumImages(true); i++) {
                BufferedImage splitedImage = reader.read(i);
                images.add(splitedImage);
            }
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            throw new IOException("Image file format not supported by ImageIO: " + tiff.getAbsolutePath());
        } finally {
            in.close();
        }
        return images;
    }

我在ImageIO方法前后放置了一些logger.infos,以查看代码在哪里停止。我的日志仅显示“正在创建ImageInputStream”。并关闭罐子。我不知道出什么事了...有人可以帮我吗?

0 个答案:

没有答案