从jar文件加载图像(使用Eclipse IDE)

时间:2014-09-21 17:20:32

标签: java eclipse image swing embedded-resource

我有一个简单的swing应用程序,其中包含一个包含各种组件的JFrame。在JFrame上,我有一个扩展JPanel的自定义工具栏类。在JPanel上,我计划添加带图像图标的按钮。我的目录结构如下:

  • Project / src / gui(包保存应用程序的源文件)
  • Project / src / images(包含一个带有按钮图标和/或单个图像文件的jar文件jlfgr-1_0.jar

问题是我想避免将单个图像文件复制到图像包中。我宁愿只是直接从jar文件加载图像。我有私有方法返回相应的图标。例如,如果我将图像文件拖到图像包中并调用:

,则此方法有效
    button.setIcon(createIcon("/images/Save16.gif"));

private ImageIcon createIcon(String path) {
    URL url = getClass().getResource(path);
    ImageIcon icon = new ImageIcon(url);

    if(url == null) {
        System.err.println("Unable to load image: " + path);
    }
    return icon;

我知道这是基本的,但是如何在我当前的设置中直接从jar文件中获取我的图像? 感谢。

2 个答案:

答案 0 :(得分:1)

由于javax.imageio.ImageIO

,您可以从流中读取图片
private ImageIcon createIcon(String path) {
    BufferedImage image = ImageIO.read(getClass().getResourceAsStream(path));
    ImageIcon icon = new ImageIcon(image);
    return icon;
}

答案 1 :(得分:0)

这是另一种方式。图片位于src/images

位置
BufferedImage myPicture = null;
try {
    myPicture = ImageIO.read(this.getClass().getResource("images/Picture2.png"));
} catch (IOException e) {
    // TODO Auto-generated catch block
    try {
        myPicture = ImageIO.read(this.getClass().getResource("images/broken_image.jpg"));
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}
JLabel picLabel = new JLabel(new ImageIcon(myPicture));
panel.add(picLabel);