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包換掉就可 以了。