【发布时间】: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