【问题标题】:Can't read input file - Reading an image contained in a jar file - java无法读取输入文件 - 读取 jar 文件中包含的图像 - java
【发布时间】:2011-08-28 11:29:19
【问题描述】:

我猜有人问过类似的问题,但我找不到解决方案。我正在开发一个基于 Java Swings 的绘画应用程序。 我需要为 BufferedImage 类创建一个实例,以便保存我绘制的图像。我想选择一张背景图片,我会在上面画一些东西。我有一些预定义的背景图像集,我将它们放在与源文件相同的文件夹中,并在代码中访问它们。该代码在 Netbeans 中运行时运行良好。如果我构建并运行 jar 文件,它会显示无法读取输入文件。我知道我们不能直接访问 jar 中的文件,所以我使用了以下代码:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("bg3.jpg");
bgfile=ImageIO.read(is);

bgfile 是 BufferedImage 类的对象。因此,一旦我作为 jar 文件运行,就会引发以下 IOexception:

无法读取输入文件!

但是如果我用winrar打开jar文件,我可以在jar文件的根目录下找到bg3.jpg文件。 如果我将路径指定为“/bg3.jpg”,则 jar 文件本身不会打开。

所以我需要一些帮助和解释。提前致谢。

【问题讨论】:

    标签: java image swing exception executable-jar


    【解决方案1】:

    由于您的解决方案与here 解释的相同,我认为您只是忘记将包包含在路径中,即:

    InputStream is = this.getClass().getClassLoader().getResourceAsStream("package1/package2/.../bg3.jpg");
    bgfile=ImageIO.read(is);
    

    【讨论】:

      【解决方案2】:

      完整的堆栈跟踪可能会有所帮助。但是,如果您对异常的描述是准确的,它不会告诉您它找不到图像文件。它告诉你它无法读取它。您确定 jpg 文件没有损坏或由于某些其他原因无法识别为 ImageIO 类的 jpg 文件吗?

      如果资源为 null,ImageIO.read() 方法会给出一个异常,原因为 input == null。我认为它正在寻找它。它只是无法将其作为 jpg 文件读取(尽管没有完整的堆栈跟踪很难确定)。

      如果您的图像资源确实位于 jar 文件的顶层,那么您不需要任何前导文件分隔符。所以如果你的 jar 看起来像这样:

      1523 Tue Mar 30 23:14:50 CDT 2010 org/apache/log4j/xml/SAXErrorHandler.class<br>
      286 Tue Mar 30 23:14:50 CDT 2010  org/apache/log4j/xml/UnrecognizedElementHandler.class<br>
      4109 Tue Mar 30 23:14:52 CDT 2010 org/apache/log4j/xml/XMLLayout.class<br>
       745 Tue Mar 30 23:14:52 CDT 2010 org/apache/log4j/xml/XMLWatchdog.class<br>
      7028 Tue Mar 30 23:14:34 CDT 2010 org/apache/log4j/xml/log4j.dtd<br>
       911 Wed May 11 14:31:30 CDT 2011 redball.gif
      

      您将加载 redball.gif:

      Image image = (ImageIO.read(this.getClass().getClassLoader().getResource("redball.gif")));
      

      【讨论】:

        【解决方案3】:

        jar 文件的内容区分大小写。这听起来可能很愚蠢,但你检查过文件盒吗?如果您有文件 File.jpg,则加载 file.jpg 将不起作用。甚至扩展名也是区分大小写的(file.JPG vs file.jpg)。

        【讨论】:

          猜你喜欢
          • 2017-07-01
          • 2012-10-26
          • 1970-01-01
          • 2023-04-06
          • 1970-01-01
          • 2018-01-18
          • 1970-01-01
          • 2017-11-08
          • 2013-02-20
          相关资源
          最近更新 更多