我无法显示我的ImageIcon

时间:2014-10-23 22:17:39

标签: java image swing embedded-resource imageicon

这是我的代码

import javax.swing.*;
public class Option extends JFrame{ 

ImageIcon img = new ImageIcon("image.png");
ImageIcon img2 = new ImageIcon("image2.png");
JButton testBut = new JButton(img);
JButton testBut2 = new JButton(img2);
JPanel pnl = new JPanel();

public Option(){
    super("Swing Window");
    setSize( 500,200 );
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pnl.add(testBut);
    pnl.add(testBut2);
    add(pnl);
    setVisible(true);
}

public static void main(String[] args){
    Option gui = new Option();
}
}

我将这两个图像放在与类文件相同的目录中,并且按钮显示为空白。我是Java的新手,所以我想不出有什么理由这是错误的。

修改

图像与Option类

位于同一目录中

2 个答案:

答案 0 :(得分:2)

  

“图像与Option类”

位于同一目录中

ImageIcon(String)正在尝试在工作目录的上下文中找到命名的图像(从执行程序的位置)并且它将失败,因为那里的图像实际上不存在。

图像包含在应用程序上下文中(当您的应用程序被监视时,图像将在Jar中被记录)。

相反,你应该尝试使用......

img = new ImageIcon(getClass().getResource("image.png"));

来自类的构造函数。这将尝试查找相对于在应用程序的类路径上下文中调用getResource的类的包的图像

我还鼓励使用ImageIO.read ImageIcon有两个原因,第二,保证在调用方法时加载图像(而不是在某些后台线程中加载)二,如果由于某种原因无法加载图像,它将抛出IOException,这样会更有帮助

有关详细信息,请查看Reading/Loading an Image

答案 1 :(得分:1)

您还可以添加类似的代码:

setIconImage(new ImageIcon(new File("icona.png").toString()).getImage());