今天早上我正在测试我的程序并运行它并且运行良好。一个小时后,我的图像停止出现在我的按钮上,我不知道为什么。
JButton chuck = new JButton(new ImageIcon("chucknorris.jpg"));//this part of program runs this if user picks lizard
chuck.setSize(210,175); //sets size of button
chuck.setLocation(25,75); //sets location of button
chuck.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent e) {
int answer = JOptionPane.showConfirmDialog(null, "\t\t STATS\nAttack: 10\nDefence: 15\nspecial: bomb");
if (answer == JOptionPane.NO_OPTION) {
System.out.println("No button clicked");
} else if (answer == JOptionPane.YES_OPTION) {
x = 1;
b = 0;
} else if (answer == JOptionPane.CLOSED_OPTION) {
System.out.println("JOptionPane closed");
}
}
});
答案 0 :(得分:2)
我的图片存储在我的java文件
的文件夹中
这表明图像实际上是嵌入的资源,不能像文件系统上的普通文件一样被引用。
ImageIcon(String)
假定String
引用指的是文件系统上的文件。构建完成后,这将不再是true
,而是需要根据您的需要使用Class#getResource
或Class#getResourcesAsStream
,例如......
JButton chuck = new JButton(new ImageIcon(getClass().getResource("chucknorris.jpg")));
更好的解决方案是使用ImageIO.read
,因为如果由于某种原因无法加载图像,这将实际抛出IOException
,而不是静默失败
try {
BufferedImage img = ImageIO.read(getClass().getResource("chucknorris.jpg"));
JButton chuck = new JButton(new ImageIcon(img));
} catch (IOException exp) {
JOptionPane.showMessageDialog(null, "Check has left the building");
exp.printStackTrace();
}