永发信息网

java项目打成jar包后图片无法显示

答案:3  悬赏:40  手机版
解决时间 2021-11-12 03:01
java项目打成jar包后图片无法显示
最佳答案
例如:以Windows为例说明,以下是开发项目“AAA”的部分代码,开发和调试时的根路径为D:\aaa,这样程序运行时当前路径为"D:\aaa",大家可以用System.getProperty("user.dir")方法求证当前用户工作路径。
//下面代码使用了基于当前工作路径的方式指定了文件对象
File imageFile = new File("/images/sample.gif");
ImageIcon imageIcon = new ImageIcon(File.toURI);
File iniFile = new File("/conf.ini");
FileInputStream fileInputStream = new FileInputStream(iniFile.toURI);

以上的代码应用绝对路径信息指定了文件对象,在开发和调试期(未打包前),是没有问题的,但在打包后,由于所有图片文件和文本文件都将打包到Jar文件 中,由于System中的"user.dir"属性发生了变化,会造成用绝对路径的方式无法找到Jar文件中包含路径和文件。例如大家将上面的项目 “AAA”中的所有类文件、图片文件和文本文件等打包为E:\aaa.jar文件并发布,在用户执行该aaa.jar中的程序时,当前路径取决于用户运行 该程序的当前路径。
例如: 在“E:\”目录下运行该程序:
E:\> java -jar aaa.jar
此时用户的当前路径(System的user.dir属性)是“E:\”,而非开发者所期望的“E:\aaa”,所以会按以下路径来搜索文件:
E:\images\sample.gif
E:\conf.ini
但是所有的图片和文本文件包含在E:\aaa.jar文件中,所以会致使程序无法正常运行。
问题解决:
为了解决上述问题,推荐采用Java本身以类为基准的路径搜索方式。
例如:
/*
*以下代码采用了以当前类为基准的路径指定方式。下面这行代码在运行时,会
*在jar文件中的根路径,搜索程序中用到的文件。
Reader reader =new InputStreamReader(
getClass().getResourceAsStream("/image/Environment.ini"));
ImageIcon i=new ImageIcon(getClass().getResource("/image/b1.gif"));
以上两行代码采用了下面两条Java语句:
getClass().getResourceAsStream("FileName");
getClass().getResource("File");
含有这种代码的程序在运行时,以类(类路径)为基准,而不依赖当前路径(System中的user.dir)。
注意:上面的路径"/image/Environment.ini"如果写成"image/Environment.ini",将表示在类同路径下的路径 (className/image/Environment.ini),这需要您必须将图片和文本等文件的保存路径,和程序中指定的路径两者保持一致。
全部回答
图片不能打到包里。
你的图片的路径不在jar包中吧,你要注意写你的图片路径啊,还需要包含在你打的jar包中才可以正常使用哦^_^追问路径怎么写啊!!怎么写才对
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
家宅前面有树的风水好吗
一台7.5kw的交流三相电机,请问要多大的断路
疯狂期货:华威大学和爱丁堡大学选哪个
(每当温柔的风)这个叫什么歌
分心木能和梨干一起泡茶吗
咨询眼睛方面的问题
1-9,组成没有重复的三个三位数,要求第二个
在心动周期中左心室容积最小是在什么[请教]时
谁知道电梯和主体是怎么连接的!
怎样用吉布斯自由能求沉淀平衡常数
造诣粤语怎么读
惠东有什么黑帮
从开封县搭9路公交车转21路从哪下车
例6 证明在任何6个人中,总有3个人相互认识或
工业上怎样制氮
推荐资讯
韩后熬夜面膜怎么分辨真假
苎麻衣物会扎人吗
UG软件在哪里可以免费下载
葫芦岛大戏院地址有知道的么?有点事想过去
云南省曲靖富兴高速公路是不是归省交通厅管辖
伊利袋装赋能奶粉怎么样
我错发了一份文件到qq对话框,我不知道是否撤
陈醋辣椒皮能去鸡眼吗
梦见摘了好多榆叶是怎么回事
过去是什么意思?
100千瓦的限流器
牡丹花茶怎么泡
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?