http://blog.csdn.net/xiaohan2909/article/details/46975195
http://blog.csdn.net/gaoxuaiguoyi/article/details/71977733
http://www.360doc.com/content/14/1223/16/14013244_435201983.shtml
我们最近做了一个单机版的桌面应用系统,由于特殊的原因,我们使用了java语言开发了这个系统。当可运行的jar包打好的那个时刻我们自然是非常激动的,然而问题来了~
我们的客户是十分典型的普通大众,要如何提供给他们我们的软件呢?
我们的主旨思想就是大家都用惯了windows的应用,所以我们必需使得这款应用执行起来像个exe。而且用法和普通的软件一样。
1.打包。
以eclipse为例,选择要打包的项目,右键export,然后选择Runnable JAR file(可运行的jar文件)。点击以后会需要给项目选择一个主类(java可以包含N多个main函数,所以必须指明将哪个作为最开始运行的类。)
需要的jar包都要打进去。
成功的话会生成一个xxx.jar文件(通过cmd命令 javaw -jar xxx.jar 可以成功运行)
2.快捷方式调用
其实就是设法调用上面那个测试命令。但是问题又来了首先,你得有个jre客户的电脑上装没装jre是未知的,而告知客户安装jre也不太好,于是我们选择的是把jre也作为了程序的一部分。即把jre和xxx.jar放在同一个文件夹下,然后,我们选择用windows都能执行的vbs脚本来调用上面的命令,脚本内容如下,假如叫start.vbs:
Set shell=wscript.createObject("wscript.shell")
a=shell.Run("start ./jre/bin/javaw.exe -jar xxx.jar",0)
题外话:为什么不用bat?因为始终没解决弹出黑框的问题!
然后,我们的目标就是安装的时候在桌面生成这个vbs的快捷方式(快捷方式的图标也要换)!
3.打包安装
这里用到一个打包软件,我们使用的是Smart Install Maker,它可以将一个文件夹下的所有内容打成安装包,并且支持生成某个文件的快捷方式(指定图标),也支持生成卸载程序,具体的使用细节可以百度。需要打包的内容主要有:
然后让安装程序自动生成start.vbs的快捷方式在桌面,以及在开始菜单生成卸载程序等。这样整个流程就基本完成了。但是不久我们就遇到了新的问题!
4.新的问题
上面用vbs调用的脚本方法挺好,不会弹出黑框,但是java有个硬伤,调用程序之前要先打开java虚拟机,这里当然可以在程序里想办法把它作为一个服务长期开着,但是本着不占用客户资源的想法,我们没那么做,而这样导致的问题是每次开机第一次运行的时候程序打开缓慢,点击了快捷方式没反应20多秒才能打开界面于是我们的客户就不干了~=_=||
我们的解决方案并不是提高启动速度,而是为程序追加一个引导界面,就像word一样先出个小框但是这个界面是不能用java写的不然等于没写所以我们用来VisualStudio的MFC写了一个显示图片的程序,但是这个程序并不知道什么时候java界面启动成功所以我们在java程序界面初始化的时候杀死这个c++界面的进程既然都用了c++于是也不用vbs脚本了,直接在c++里调用cmd运行jar就得了,整理一下顺序是这样的:
C++程序运行打开引导界面-〉调用javaw启动jar->java虚拟机和程序成功启动-〉java程序杀死C++程序的进程-〉java界面初始化
下面附上控制用的关键代码:
C++调用cmd不弹出黑框框~:
ShellExecute(NULL,NULL,”\”“绝对路径\javaw.exe\”“,” -jar \”绝对路径\exam.jar\”“,NULL,SW_SHOWDEFAULT );
这个函数不支持相对路径,所以要使用绝对路径,而且一定要在stdafx.h里面加上#include <shlobj.h> #include <shellapi.h>
不然函数没反应~
java程序杀死某个进程:Runtime.getRuntime().exec("taskkill /F /IM xxx.exe");
然后这个事到这就算完了,不知道对大家有没有用~
最后,感谢挑剔的客户,他们促进了我们技术的进步~
============
http://blog.csdn.net/gaoxuaiguoyi/article/details/71977733
首先打包成j可执行的jar文件。
接下来找到自己生成jar文件的路径就可以看到jar文件了,我的是在桌面:
在桌面新建一个文件夹(名字随便取,一般去项目名字)
上面是我取的文件夹名字,然后把资料文件都一起放入进去:
上面就是我所用到的文件,一个图片文件,一个是jre文件夹(后面打exe使用的)。
下载exe4j软件,安装,打开。
这是主界面,License直接随便百度一个就行了,点击next。
[图片上传失败...(image-dc43a6-1517190932526)]
第二部设置界面直接next。
然后next。
设置完毕一直next。
上图圈住的3个全部删除,然后自己添加。
然后next。
设置完版本之后,一直next。
如果正常运行了,exe生成已经完毕了,接下来设置安装。
安装软件Inno Setup Compiler(直接百度搜索就能查到,下载安装就行了)。
然后next。
设置完毕,一直next。
然后一直next就行了,中间会遇到
设置完毕,一直next。
点击保存之后,就开始执行脚本了。
执行完毕就去自己设置的文件夹找到exe程序。
测试一下是否正常就行了。
到此,java桌面应用程序打包已经完毕。