【问题标题】:Error while getting image from resources folder从资源文件夹获取图像时出错
【发布时间】:2013-08-16 23:31:15
【问题描述】:

(首先,如果有一百万个这样的问题,我很抱歉。我已经尽我所能,这让我发疯了!)

我正在尝试为 JButton 设置一个图标,但我不断收到由 ImageIO 引起的 IllegalArgumentException

这是我所拥有的:

    //Other UI elements ^
    JButton X = new JButton("Clear");        
    //com.oliveira.ux is the package name
    Image img = ImageIO.read(getClass().getResource("/com.oliveira.ux/resource/gtk-clear.png"));
    Icon clear = new ImageIcon(img);
    //More UI elements

图标位于 src/PACKAGE NAME/resource/ 下。 (我使用日食)。 我试图更改上面代码的位置(我在这里写的那个是我尝试的最后一个),但是当我运行 de .jar 时,我得到的只是一个 IllegalArgumentException。有什么建议吗?

在此先感谢

这是完整的错误信息:

Caused by: java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(Unknown Source)
    at com.oliveira.ux.Main.<init>(Main.java:146)
    at com.oliveira.ux.Main.main(Main.java:75)
    ... 5 more

这指向我上面写的代码中的ImageIO部分。

【问题讨论】:

  • 请发布完整的堆栈跟踪以及任何“由”部分,并在您的代码中指出引发异常的语句。
  • getClass().getResource() 查找相对于当前类位置的文件,因此如果您的类已经在 com.oliveira.ux 包中,那么您只需传递它"resource/gtk-clear.png"。顺便说一句,包是文件夹,所以 com 应该是一个文件夹, Oliveira 应该是一个子文件夹,等等;因此,您会执行类似 com/oliveira/blah/blah 的操作。
  • 这是com.oliveira.ux 假设是网络引用还是包路径引用。如果是路径,则不应以.分隔,而应以/分隔
  • @sbat 做到了,谢谢!我以为它是因为 eclipse 而用点分隔的......甚至不记得检查文件系统。总之谢谢
  • @MadProgrammer 这是包名

标签: java swing javax.imageio


【解决方案1】:

路径好像错了……

Image img = ImageIO.read(getClass().getResource("/com.oliveira.ux/resource/gtk-clear.png"));

getResource 不期望包名称,而是从类路径的上下文到资源的“路径”(因此路径被附加到类路径元素)

类似...

Image img = ImageIO.read(getClass().getResource("/com/oliveira/ux/resource/gtk-clear.png"));

应该会给出更好的结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 2015-06-27
    • 1970-01-01
    • 2022-08-23
    • 2020-10-21
    • 2016-08-06
    • 1970-01-01
    • 2013-03-12
    相关资源
    最近更新 更多