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是小写字母,则不能工作。 检查空间,案例和拼写