【问题标题】:Java unknown source with ImageIO带有 ImageIO 的 Java 未知来源
【发布时间】:2012-10-11 14:20:32
【问题描述】:

我的程序在 Netbeans 中运行良好,但在浏览器中运行我的小程序时出现以下错误:

java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(Unknown Source)

我打开 jar 以验证 png 文件是否正确放置在那里。我不确定为什么以下内容不起作用(当然是在 try 块中):

BufferedImage beam = ImageIO.read(this.getClass().getResource("images/beam.png"));

我尝试过类似以下的其他方法,但怀疑问题可能出在其他地方。

URL url = this.getClass().getResource("images/beam.png");
BufferedImage beam = ImageIO.read(url.openStream());

感谢您的建议。

【问题讨论】:

  • URL url = this.getClass().getResource("images/beam.png"); 图像在调用类的包的子目录中?要从类路径的根目录创建该路径,请将其设为 URL url = this.getClass().getResource("/images/beam.png"); 并确保打印出 URL 或在调试器中检查它。看来您目前正在猜测。
  • 您能解释一下您是如何构建放置类和图像的 JAR 文件的吗?可能有助于激发一些想法。
  • myJar.jar 与 lib 位于同一目录中。 jar 有目录 mypackage 和 META-INF。 mypackage 目录包含类文件和目录图像。 images 目录有 png 文件。我认为路径“images/beam.png”是相对于类文件的。
  • 抱歉,我的回复延迟了。我正在与进出我办公室的人一起解决这个问题。
  • 如果您希望某人收到评论通知,请添加 @PersonName。

标签: java png embedded-resource javax.imageio


【解决方案1】:

问题出在您的路径字符串中。改用这个:

BufferedImage beam = ImageIO.read(this.getClass().getResource("/images/beam.png"));

(注意路径前的/

【讨论】:

  • 将路径更改为“/images/beam.png”并不能解决问题。
  • 那么您的 JAR 中的 beam.png 文件在哪里?您必须使用完整路径。
  • 为了让NetBeans构建一个在浏览器中工作的jar,images目录必须在src目录而不是包目录,然后在路径工作之前的“/”:“/images/梁.png"。
【解决方案2】:

作为记录,如果有人由于某种原因遇到这种类型的错误,eclipse 会自动更改构建路径并阻止图像路径被打包。

要更改此设置,只需 right click on the project name -> Properties-> Java Build Path-> Source Tab 并检查包含图像的文件夹是否未被排除,如果只是删除该规则。

【讨论】:

    猜你喜欢
    • 2013-04-06
    • 2018-11-22
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多