我正在编写一个程序,要求我有一个按钮,上面有一个图像,但到目前为止,我还没有能够让它工作。我查看了本网站上的其他几篇帖子,包括How do I add an image to a JButton 我的代码:
public class Tester extends JFrame
{
public Tester()
{
JPanel panel = new JPanel();
getContentPane().add(panel);
panel.setLayout(null);
setTitle("Image Test");
setSize(300,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JButton button = new JButton();
try
{
Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));
button.setIcon(new ImageIcon(img));
}
catch (IOException ex) {}
button.setBounds(100,100,100,100);
panel.add(button);
}
public static void main(String[] args)
{
Tester test = new Tester();
test.setVisible(true);
}
}
当此代码运行时,会出现错误:线程“main”中的异常java.lang.IllegalArgumentException:input == null!此错误发生在以下行:
Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));
我不认为这个错误是由于java代码找不到该文件,因为我的Images文件夹位于src文件夹中(我正在使用Eclipse),如上面链接所推荐的那样。
有没有人对问题可能有什么想法?
感谢。
答案 0 :(得分:9)
使用Eclipse时,您不会将图像保留在 src文件夹中,而是为此目的创建Source Folder
。请参阅此链接,了解如何add images to resource folder in Eclipse。
答案 1 :(得分:2)
使用此按钮创建按钮。
JButton button = new JButton(new ImageIcon(getClass().getClassLoader()
.getResource("Images/BBishopB.gif")));
您正在做的是将Image
设置为图标。这不起作用,因为setIcon()
方法需要实现Icon
接口的对象。希望这会有所帮助。
答案 2 :(得分:2)
尝试在getResource()
中的包名前加上正斜杠,如下所示:
Image img = ImageIO.read(getClass().getResource("/Images/BBishopB.gif"));
答案 3 :(得分:1)
您可以直接找到图片:
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.
如果图像在JAR中,我通常会创建一个函数来为我进行检索,以便我可以重复使用它。
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"));
答案 4 :(得分:1)
Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));
此行尝试同时执行过多操作,这使得在获取错误时很难找到错误。我建议拆分它:
URL imgURL = getClass().getResource("Images\\BBishopB.gif");
Image img = ImageIO.read(imgURL);
现在您可以使用Eclipse调试器来检查imgURL
的返回值,这是NPE最有可能的候选者。尽管这并没有告诉您为什么会收到错误消息,但它会大大缩小问题范围。