Java Swing:在Jar中显示图像

时间:2008-08-27 20:14:07

标签: java swing embedded-resource imageicon

从eclipse运行Java应用程序时,我的ImageIcon显示得很好。

但是在创建一个jar之后,图像的路径显然已经搞砸了。

有没有办法在运行时从jar中提取图像,以便我可以打开它?或者,有更好的方法吗?

如果可能,我想分发一个jar文件。

5 个答案:

答案 0 :(得分:32)

要从同一个jar中的图像文件中创建ImageIcon,您的代码将被加载:

new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))

Class.getResource返回资源的网址(或null!)。 ImageIcon有一个从URL加载的构造函数。

要在不在“类路径”上的jar中构建资源的URL,请参阅java.net.JarURLConnection的文档。

答案 1 :(得分:21)

您可以尝试以下内容:

InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");

在您的JAR文件中,您可能具有以下目录结构:

  

MyJAR.jar
   - com(这里的类文件)
   - 图像
  ---- image.jpg的

答案 2 :(得分:9)

我可以加载和设置内容窗格背景图片:

jar(或构建路径)包含:

 - com
 - img
 ---- bg.png

java包含:

JFrame f = new JFrame("Testing load resource from jar");
try {
    BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
    f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
    e.printStackTrace();
}

在jar和unjarred(即技术术语)执行中进行测试和工作。

BTW getClass().getClassLoader().getResourceAsStream("/img/bg.png") - 我先试过 - 给我一个null的InputStream。

答案 3 :(得分:1)

在netbeans 8.1中,我所做的是在项目文件的 src 文件夹中包含图标文件夹和名为资源的其他图像。因此,每当我构建 Jar 文件时,文件夹都包含在那里。文件树应该是这样的:

  
      
  • src(源包中的Java文件在这里)
  •   
     
    
        
  • **您在项目中命名的包裹**

             
          
            
    • file.java
    •       
        
  •     
  • 资源

             
          
            
    • image.jpg的
    •       
        
  •     
  

代码应该是:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));

答案 4 :(得分:0)

在运行时从Jar文件加载图像与从IDE执行时加载图像相同,例如netbeans,区别在于从JAR文件加载图像时路径必须正确并且区分大小写 (很重要)。 这对我有用

 image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg"));
        img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH);
        lblhabitat1.setIcon(new ImageIcon(img));

如果p in" /Pictures/firstgame/habitat1.jpg"是小写它不会工作。检查空格,案例和拼写