Java 如何在JButton上放置图像?

Java 如何在JButton上放置图像?,java,image,swing,jbutton,embedded-resource,Java,Image,Swing,Jbutton,Embedded Resource,我正在写一个程序,要求我有一个按钮,上面有一个图像,但是,到目前为止,我还不能让它工作。我已经查看了该网站上的其他几个帖子,包括。 我的代码: 当此代码运行时,会出现一个错误:线程“main”java.lang.IllegalArgumentException中的异常:input==null!此错误发生在以下行: Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif")); 我不认为这个错误是由于java代码

我正在写一个程序,要求我有一个按钮,上面有一个图像,但是,到目前为止,我还不能让它工作。我已经查看了该网站上的其他几个帖子,包括。
我的代码:

当此代码运行时,会出现一个错误:线程“main”java.lang.IllegalArgumentException中的异常:input==null!此错误发生在以下行:

Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));
我不认为这个错误是由于java代码找不到文件造成的,因为我的Images文件夹位于上面链接推荐的src文件夹中(我正在使用Eclipse)。
有人知道问题出在哪里吗

谢谢。

使用此按钮创建按钮

JButton button = new JButton(new ImageIcon(getClass().getClassLoader()
                                          .getResource("Images/BBishopB.gif")));

您要做的是将
图像设置为图标。这不起作用,因为
setIcon()
方法需要实现
Icon
接口的对象。希望这有帮助。

尝试在
getResource()
中的包名前加一个前斜杠,如下所示:

Image img = ImageIO.read(getClass().getResource("/Images/BBishopB.gif"));

使用Eclipse时,您不会将图像保存在src文件夹中,而是为此创建一个
源文件夹。请参考此链接了解如何操作。

您可以直接找到图像:

JButton jb = new JButton(new ImageIcon("pic.png")); //pic is in project root folder
//Tip: After placing the image in project folder, refresh the project in Eclipse.
或者,如果图像将在一个罐子中,我通常会创建一个函数来为我进行检索,以便我可以重复使用它

public static ImageIcon retrieveIcon(String path){
    java.net.URL imgUrl = 'classpackage'.'classname'.class.getResource(path);
    ImageIcon icon = new ImageIcon(imgUrl);
    return icon;
}
那我就做

JButton jb = new JButton(retrieveIcon("/pic.png"));
这一行试图一次做太多的事情,这使得在你得到一个错误时很难追踪到错误。我建议把它分开:

URL imgURL = getClass().getResource("Images\\BBishopB.gif");
Image img = ImageIO.read(imgURL);

现在,您可以使用Eclipse调试器来检查
imgURL
的返回值,它很可能是NPE的候选者。尽管这并不能告诉您为什么会收到错误消息,但它大大缩小了问题的范围。

请在项目层次结构中提供图像路径您是否实际检查了
getResource()的返回值
?这是图像路径:C:\Documents and Settings\student\My Documents\Dropbox\ADVCS\u Workspace\Chess\u Program\src\Images@TristanHull图像位于何处并不重要。重要的是图像相对于相应的类文件位于何处。很可能找不到您的图像。所以首先要做的事情是:试着看看图像是否被找到。此外,如果不在某处打印stacktrace或留下异常的跟踪信息,就永远不要捕获异常。这使得你的代码很难调试。请看一看与你的问题相关的我的文章。这个答案与你的项目的所有目录结构有关,如果找不到图像,这并不能解决他的问题。你回答的第二部分是不正确的,因为他将图像读取到一个图像中,然后将该图像包装到一个图像图标中。因此,这部分代码是正确的。@GuillaumePolet这部分直接从URL创建ImageIcon,而不涉及
ImageIO
和其他不必要的部分。您说过,我引用:这不起作用,因为setIcon()方法需要实现Icon接口的对象。这句话不正确。@GuillaumePolet看,这证明了我的说法。你说“它不起作用”,那是不对的。不管怎么说,你的回答并不能解决问题。+1很好的链接:)是的,我想可能是他没有前卫的slashMore,所以我担心的是,没有使用源文件夹来处理上述内容,因为OP说图像在src文件夹中,我怀疑这是不是正确的方式,源文件夹只是惯例。您不必使用特殊的“资源文件夹”来读取图像。你的路径必须是正确的。确实如此,当你开始运行你的程序时,资源文件夹中的任何东西都会自动进入bin文件夹。因此,当您使用Eclipse创建.jar文件时,您不必担心指定的路径是否有效。现在我头痛……:(
Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));
URL imgURL = getClass().getResource("Images\\BBishopB.gif");
Image img = ImageIO.read(imgURL);