admin 管理员组

文章数量: 887042


2023年12月24日发(作者:python oracle数据库)

图解JAVA生成EXE程序

背景

一直用C#、Delphi、VC等写程序,最近项目要求使用JAVA写桌面程序,印象中JAVA适合写WEB程序,但是写桌面程序好像有点勉强,实际使用下来,感觉语言挺好用的和VC类似,程序结构也和C#很像,但是写个界面程序不太灵活,更不能接受的是,最后输出的是一堆的Class文件,网上有人说在DOS CMD切换到当前目录,JAVA运行含主程序的类,这在C#、Delphi程序员眼里,简直是半成品啊!

经过摸索最后能生成JAR包,如果安装了JRE是可以直接运行了,还可以做成BAT程序也可以直接运行(但是有DOS的黑框),能不能直接生成EXE呢?

这需要打包程序来实现,经过测试,试过好几种,包括Jsmooth、Java2exe、Exe4j等,最后还是觉得Exe4j好用,过程记录如下,供参考。

详述步骤

1. welcome-打开exe4j

如果你有保存过的项目打包配置文件,那么点>>open打开即可。如果没有点>>next.

2. Project type-选择打包方式

由于我们讲的是打包jar生成exe,所以选“jar in exe”mode,这种方式可以把一个java应用程序打包成一个exe文件,但是不能将除jar以外的附加文件打包进去。然后>>next

3. Application info-配置生成的应用程序的信息

设置你的应用程序的名称和将要生成的可执行文件的输出文件夹。然后>>next.

4. Executable info -配置可执行文件的参数

type项根据你的程序的类型确定,本例为GUI程序;接下来是文件名、可执行文件的图标、是否只允许同时刻只能运行一个应用程序、当主线程有误时是否抛出异常、更改工作目录(相对于可执行文件)。然后点>>advanced options>>version info

5. version info-设置版本信息

6. java invocation-配置运行环境

先配置class path,将此项内原有的配置全部删除,然后点“+”找到你生成的jar文件,

然后在上边的general中点浏览按钮,exe4j会自动找到你应用程序的入口-main

class。

在下边的advanced options中选native libraries设置,此功能是添加你程序用到的外部jar包文件,这个我一直没用过,因为我做什么事都喜欢集中,所以在程序中用到

的所有外部包全整合到jdk/jre里了,这样在给客户安装程序时只要把程序直接给他考过去就可以用了,不用再安装其它东西。

7. jre-配置jre

在这里配置你的jre版本类型,然后再看>>advanced option>>search sequence

在这里来配置你运行程序所需的jre/jdk的位置,如果你只是打包后本机运行,直接指定到你本机的jre/jdk目录即可,如果你打包后的程序要在别的客户机上运行,而该机又没

装jdk,这时我们就要想另一种方法了。从客户的角度讲,拿到手的软件在安装过程中应尽可能少的给客户带来繁琐的安装事项,最好只点一下鼠标就能自动安装。因此,我们要让用户省去安装jdk的麻烦。要解决这个问题,我们可以把安装好的jdk复本放置在最终产品的根目录下,然后在上图中添加这个jdk复本为程序的运行环境

search registty 可以扫描已经安装的jdk/jre,我们选择directory,为程序指定一个jdk目录,只需定位到jdk根目录即可,如上图。 然后>>next

这里要说明一点,用eclipse开发的程序只要一个jre就行了,jdk不用的,所以我是把jre打包进exe运行环境的,这样的话在java version下边的那个允许使用jre beta版的选项就要选中了。

8. preferred vm-选择虚拟机

这个根据具体情况选择,本例为client. 然后>>next

9. splash screen -预载窗体

在这里可以设置你的预载窗体界面,不过好像只认gif类型的图片,status line and

version line 可以在position text lines visually预览界面中调整其显示位置。然后>>next,接下来是选择语言界面,根据自己情况选择。然后>>next

10. compile executable-编译生成可执行文件

自动跳转至:

在这里可以点击运行生成的可执行文件,也可以将本次配置方案保存起来以备后用。

11 遗留问题

点击生成的EXE,看到程序可以打开了,生成EXE成功了。可是,仔细用一下发现参数不能保存了!每次程序运行时保存的参数,下次再运行时,没有了!这对桌面程序来说,还是有点不可接受。

如图,做一个获取程序文件夹的功能,发现文件夹是临时的,每次运行文件夹不一样,难怪保存的数据找不到了。

怎么解决呢,我们看到这个程序调用了一个GPRS/CDMA的DLL,是上海正伟的一个成熟的DLL,我们生成的EXE是调用这个“”,这个GPRS DLL是和程序放在一起的,既然可以找到GPRS DLL,那按照道理,是可以找到参数文件的,这个要程序做些测试了。


本文标签: 程序 运行 生成