Java Swing:显示来自Jar内的图像

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

但创build一个jar后,图像的path显然是搞砸了。

有没有办法在运行时从jar中提取图像,然后我可以打开它? 或者,有没有更好的方法来做到这一点?

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

要从同一个jar子里的图像文件创build一个ImageIcon ,你的代码被加载:

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

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

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

你可以尝试像这样:

 InputStream stream = this.getClass().getClassLoader().getResourceAsStream("http://img.dovov.comimage.jpg"); 

在你的JAR文件中,你可能有一个目录结构:

MyJAR.jar
– com(在这里的类文件)
– 图片
—- image.jpg的

这正在为我加载和设置内容窗格背景图像:

jar(或构buildpath)包含:

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

testing和工作在jar子和不受限制(是技术术语)执行。

BTW getClass().getClassLoader().getResourceAsStream("/img/bg.png") – 我第一次尝试 – 返回给我一个空的InputStream。

在NetBeans 8.1中,我所做的是在项目文件的src文件夹中包含名为Resources的图标和其他图像文件夹。 所以每当我build立jar文件的文件夹都包含在那里。文件树应该是这样的:

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

    • file.java
  • 资源

    • image.jpg的

代码应该是这样的:

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

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

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

如果“/Pictures/firstgame/habitat1.jpg”中的p是小写字母,则不能工作。 检查空间,案例和拼写