Java GUI项目读取Jar内部外部文件 打包EXE 在没有java环境的电脑上可运行

本文详细介绍了如何处理Java GUI(Swing/SWT)项目中Jar包内部外部文件的读取问题,打包成EXE,并确保在没有Java环境的计算机上仍能运行。解决方法包括将配置文件放在Jar同级目录,使用exe4j进行打包,选择正确的Java版本,以及精简Jre以减少发布体积。

本文记录我最近一个业余swing swt项目中遇到的问题及解决办法,主要问题有三点:

1. Jar包内部外部文件读取问题

2. 打包为EXE问题

3. 在没有java环境的电脑上使用问题


1. Jar包内部外部文件读取问题

通常项目中会用到图片文件、音乐文件、配置文件等,这些文件除了配置文件一般放在jar包外部,其他文件一般导出Jar时都放在Jar内部,这时你会发现本来在Eclipse运行好好的,导出后Jar却经常出错,读取不到文件或者路径错误。这里提供解决办法:

读取外部配置文件,请将配置文件放在Jar同级目录中,然后使用以下方式读取:

	private String confPath = System.getProperty("user.dir") + "\\conf.properties";
	    	//读取配置文件
	    	InputStream in = new BufferedInputStream (new FileInputStream(confPath));
	    	prop.load(in);
	    	in.close();


然后要读取Jar内部的图片、音乐等文件,这些文件放在Jar内根目录下,使用以下方式:

	                try {
	                    img = ImageIO.read(App.class.getResourceAsStream("/imgs/"+index+".jpg"));
	                } catch(IOException e) {
	                    e.printStackTrace();
	                }

另外播放音乐,建议还是使用audio类,虽然只支持wav等格式,有点局限,但是好控制一些,可以通过百度音乐将mp3格式转换为wav格式。

	                   try {  
	        	            // 1.wav 文件放在java project 下面  
	        	            FileInputStream fileau = (FileInputStream) App.class.getResourceAsStream("/tt.wav");;  
	        	            as = new AudioStream(fileau);  
	        	            AudioPlayer.player.start(as);  
	        	        } catch (Exception e1) {  
	        	            e1.printStackTrace();  
	        	        }


2. 打包为EXE问题

首先导出为Jar包,注意要选择程序入口,即main。

然后使用exe4j软件进行打包,教程可以网上找,注册后不会弹出烦人的提示框。

要注意的主要是如果用的64位Java,打包时需要选择64位。


如果使用了第三方Jar在选择包时除了自己项目导出的Jar包外,把第三方包也要加上,然后下面选择程序入口主类时选择自己的主类就是。


3. 在没有java环境的电脑上使用问题

这个需要将Jre也一起发布,但是Jre实在太大了,有100多兆,这样发布程序太臃肿。因此要进行Jre精简,具体精简方法可以网上找,一般使用可以找个精简的Jre下载下来使用。

我用的Jre7的64位精简版,大概20多兆,不算特别精简,但是比较均衡。这里提供下载地址:

Jre7的64位精简版下载地址

将下载的Jre在导出的Jar同级目录建个Jre7文件夹并解压进去,然后在选择Jre Sequence时,选择这个文件夹。


后面打包成EXE之后,要将Jre7文件夹,EXE文件,还有用到的外部配置文件一起发布出去,就可以在没有java环境的电脑上使用了。


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值