【问题标题】:Java code works in IDE but not with jar on different computerJava 代码可以在 IDE 中工作,但不能在不同计算机上使用 jar
【发布时间】:2013-10-24 16:20:49
【问题描述】:

我正在 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。

【问题讨论】:

  • 您在 IDE 上使用什么 JDK,在其他机器上使用哪个?很可能其他机器上的 JDK/JRE 是较旧的,并且没有用于读取该图像格式的库。
  • 我在有IDE的机器上使用jre7和jdk1.7.0_45。在我尝试运行 jar 的测试机器上,我安装了 jre6、jre7 和 jdk1.7.0_05。我认为我应该在目标机器上安装最新的 JDK?
  • 所有测试机上都出现错误吗?

标签: java jar javax.imageio platform


【解决方案1】:

也许这与 Java Advanced Imaging-Image 库有关,它不是 SDK 的一部分? http://www.oracle.com/technetwork/java/current-142188.html

【讨论】:

  • 由于该库捆绑在其自己的安装程序包中,我将如何使用 Inno Setup Compiler 之类的工具将该安装包含在我的应用程序中?
  • 您的问题与JAI有关吗? JAI 是否附加到您的应用程序包中?
猜你喜欢
  • 1970-01-01
  • 2015-11-06
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多