http://tomfish88.iteye.com/blog/1074786

——————————————————————————————————————————————————————————

最近看了有关swt生成exe文件的有关内容,现将自己的一点经验分享下:

由于很多的程序是在windows下面运行的,所以很多java开发的应用程序需要打包成可执行文件。

1、生成可执行jar包

其实方法有很多,主要有以下几种:

利用工具生成,如在eclipse中添加插件fat jar等(百度下,很多的),

也可以用eclispe的export直接导出。

最直接的方法就是用jar命令直接打包了,但是要将manifest.mf加入

到要打包的主目录下,然后用命jar cvfm yourjarname.jar manifest.mf yourmulu,就可以得到可执行的

jar包了(前提是你的系统jre配置正确,在windows下面默认是javaw执行jar包的),manifest.mf中主要设

置了Main-Class: 也就是你的启动类,如下:   Manifest-Version:1.0 Main-Class:your.class Created-

By:1.3.0(SunMicrosystemsInc.) 。
注意:在打包swt应用程序时,windows所需的动态连接文件需要放在所生成jar包的同一目录下,或者在

path路径里面设置好,否则会出现错误。

2、生成exe文件

推荐用exe4j,下载地址:http://www.sstc.org.cn/Components/DetailView.aspx?id=1f30ec33-a275-4d36-b075-c1c5b525f2ab&typename=download

这个用起来比较简单,不过是E文。
注意:icon的图片格式就可以了,另外需要将所用到的外部jar加入到classpath中。jdk中的就不需要加了


3、生成安装程序

推荐用install4j,也是E文的,也是不错的安装程序,不过比较复杂些,hehe

SWT的介绍(附加:Eclicpse3.1.1下配置SWT,打包发布SWT程序,转EXE一条龙过程记录)

一、SWT的介绍

SWT(Standard Widget Toolkit)

Standard Widget Toolkit是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SWT开发的。
 
 在SWT之前,Sun已经提供了一个跨平台GUI开发工具包AWT (Abstract Windowing Toolkit).
虽然AWT框架也使用的是原生窗口部件(native widgets),但是它一直未能突破LCD问题。LCD问题导致了一些主要平台特征的遗失。
 
 为解决这个问题,Sun又创建了一个新的框架。这个框架不再使用原生窗口部件,而是使用仿真窗口部件(emulated
widgets)。这个方法虽然解决了LCD问题,并且提供了丰富的窗口部件集,但是它也带来了新的问题。例如,Swing应用程序的界面外观不再和原生
应用程序的外观相似。虽然在JVM中这些Swing应用程序已经得到了最大程度的性能改善,但是它们还是存在着其原生对应物所不具有的性能问题。并
且,Swing应用程序消耗太多的内存,这样Swing不适于一些小设备,如PDA和移动电话等。
  IBM进行了尝试以彻底解决AWT和Swing框架带来的上述问题。最终,IBM创建了一个新的GUI库,这就是SWT。SWT框架通过JNI来访问原生窗口部件。如果在宿主(host)平台上无法找到一个窗口部件,SWT就会自动地模拟它。
  为了方便开发SWT程序,在SWT基础上又创建了一个更易用、功能强大的图形包“JFace”。然而,JFace并不能完全覆盖SWT的所有功能,所以编程时SWT、JFace都会要用到,但是一般来说,能用JFace的组件就最好不要用SWT的。
 
 SWT本身仅仅是Eclipse组织为了开发Eclipse IDE环境所编写的一组底层图形界面
API。或许是无心插柳,或是有意为之,至今为止,SWT无论是在性能和外观上,都超越了SUN公司提供的AWT和SWING。目前SWT已经十分稳定。
这里指的稳定应该包含两层意思:
  一是指性能上的稳定,其中的关键是源于SWT的设计理念。SWT最大化了操作系统的图形构件API,就是说只
要操作系统提供了相应图形的构件,那么SWT只是简单应用JNI技术调用它们,只有那些操作系统中不提供的构件,SWT才自己去做一个模拟的实现。可以看
出SWT的性能上的稳定大多时候取决于相应操作系统图形构件的稳定性。

 
 另一个稳定是指SWT API包中的类、方法的名称和结构已经少有改变,程序员不用担心由于Eclipse组织开发进度很快(Eclipse
IDE每天都会有一个Nightly版本的发布),而导致自己的程序代码变化过大。从一个版本的SWT更新至另一版本,通常只需要简单将SWT包换掉就可
以了。

二、Eclicpse3.1.1下配置SWT,打包发布SWT程序,转EXE一条龙过程记录

Eclipse下安装SWT
我这里用的是1.1.0.1,并且页面上就有推荐的Eclipse3.1.1,EMF,GEF。都下载了!
2.按照Eclipse安装插件的方法,安装SWT,EMF,GEF。
3.如果不出意外,就可以正常使用了!
这里有一个建议:最好使用纯的Eclipse,我开始用WTP版的,怎么配置也不行。
可以建立Visual Class,但是不能可视化添加控件,或者看不到控件的属性,或者Text,TextArea控件无法添加。后来按照以上方法,重新来了一次,OK了!
二打包发布SWT程序
1.因为需要SWTjar.但是Eclipse3.1.1配合的的SWT不是通过SWT.jar发布的!是org.eclipse.swt.win32.win32.x86_3.1.0.jar。里面包括了JINI的DLL和SWT类文件。
需要下载
这里有SWT.jar,和3个DLL,把他们解压缩出来,备用!
2.通过Eclipse的导出功能,生成一个可执行的jar,MANIFEST.MF文件选择由Eclipse生成,并且保存到项目中。
3.上面2的步骤,只是为了得到MANIFEST.MF文件。下面修改一下这个文件。
加上 Class-Path SWT.jar
如果还有其他的jar,用空格分开,加到后面
4.再生成一次jar,MANIFEST.MF选择修改后的。
5.将打包的jar,SWT.jar,3个DLL放到一个文件夹下,双击可执行的jar,程序运行!
三jar转EXE
1.打开JSmooth0.9.7。
2.选择skeleton,在skeleton properties中先把Launch java app in the exe process,Debug console选中。可以查看生成EXE文件执行过程信息。
3.选择Executable.
选择生成的EXE文件存放位置。
选择EXE文件图标
设置当前路径,选择要转换的jar文件所在文件夹
4.选择Application
设置Main Class,可执行jar中的Main Class注意写类全名
设置Application Argument,如果需要传入参数,写到这里
设置Embedded jar: 可执行的jar
设置Classpath:SWT.jar 如果有其他的继续添加
5.选择JVM Selection。默认吧。
6.JVM Configuration:
可以设置java properties,内存使用
7.点齿轮。生成!看是否有错误。
8.EXE执行需要的文件:EXE,3个DLL,SWT.jar
把他们考到其他目录,一样可以执行!
9.去掉skeleton properties中的Launch java app in the exe process,Debug console选项。
重新生成。应该OK了!
05-11 18:08