我正在 netbeans 中创建一个 java 应用程序,它将压缩多页 tiff 图像。该过程的一部分是使用各种 jai、jai-imageIO 等图像库。特别是,我有一个方法可以获取图像的位深度,如果我通过带有构建的 .jar 文件的命令行运行它,它在 IDE 和我的本地机器上都可以正常工作。有问题的方法如下:
private synchronized void setBitDepth() {
if(this.getImageInputStream() == null) {
System.out.println("ImageInputStreamFailure");
} try {
//System.out.println("Path: " + this.testTiff);
ImageInputStream testInStream = ImageIO.createImageInputStream(new File(this.testTiff)); //test
Iterator<ImageReader> readers = ImageIO.getImageReaders(testInStream);
ImageReader reader;
if(!readers.hasNext()) {
throw new IOException("Cant read format...");
} else {
reader = readers.next();
}
reader.setInput(this.getImageInputStream(), true, true);
this.bitDepth = reader.getImageTypes(0).next().getColorModel().getPixelSize();
reader.dispose();
} catch(IOException e) {
e.printStackTrace();
}
}
如果我将我的项目打包成一个 jar 文件并在另一台安装了 java 的机器上运行它,这个方法总是会抛出IOException("Cant read format...")
异常。我尝试了多种补救措施,包括尝试将所有外部库打包到单个 jar 文件中,以及多次清理和重建我的项目,但我似乎无法弄清楚为什么这在多个平台上都不起作用安装了java。