为什么我的照片不再显示了

时间:2014-06-06 02:01:43

标签: java image swing embedded-resource imageicon

今天早上我正在测试我的程序并运行它并且运行良好。一个小时后,我的图像停止出现在我的按钮上,我不知道为什么。

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");
        }
    }
});

1 个答案:

答案 0 :(得分:2)

  

我的图片存储在我的java文件

的文件夹中

这表明图像实际上是嵌入的资源,不能像文件系统上的普通文件一样被引用。

ImageIcon(String)假定String引用指的是文件系统上的文件。构建完成后,这将不再是true,而是需要根据您的需要使用Class#getResourceClass#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();
}