在安裝過程中,用戶可以選擇使用他機器上的JRE或是這個安裝包內的JRE來運行程序。這是很常見的壹種做法,顯得比較專業,而且原來的程序不需要作任何改動,安裝後的程序即在JVM上運行,可以獲得原本的效果。如JBuilder就是這麽做的。InstallAnywhere中壹個壓縮的JRE大概是8M,它可以針對linux、 win、mac等多個操作系統打包。
(2) 使用JET、gcj等工具,將應用程序制作成壹個真正的exe文件。
采用這種方式做成的exe文件可以直接在沒有安裝JRE的計算機上運行。Java類庫全部被編譯成dll,變為本地調用。
JET是收費的(從 /jetdlevala.html可以下載3.6試用版)。JET安裝好以後,它要把系統上安裝的JDK編譯壹下,要等很久。如果JDK是1.4.2_05版還需要打壹個補丁。
gcj有windows和Linux版,直接下載zip包,不需要安裝。裏面有不少例子,壹些build的批處理文件。從原理來說,gcj自己實現了 JVM規範,當運行用gcj制作的exe(大約2M)時會啟動裏面的壹個小型jvm,在上面跑應用程序。不過,gcj目前還不能完整地支持Swing。
但不管怎樣,把Java做成純exe實在是吃力不討好,有很多限制,文件又大。
(3) 使用exe4j制作偽exe文件。
原理:可執行的jar包文件可以通過命令行java -jar jarfile.jar來執行。制作偽exe其實做法壹樣,只不過做成exe,調用系統中的java.exe來運行它。
壹般情況下,exe4j做成的可執行文件仍需JRE支持,也就是說只能在安裝了JRE的計算機上運行。不過有壹種方法可制作偽exe文件,在沒有安裝 JVM的機器上也能運行:雖然exe4j並不提供將JRE打包的功能,但是它提供如何搜索JRE的方法。在第六項設定[JRE]中有壹步[Search sequence],添加壹個Directory方式的搜索入口,指定是相對目錄“.” ,然後把JRE目錄中的bin和lib兩個目錄復制到妳的發布目錄中就可以了。(當然妳可以不用當前目錄“.”,任何當前目錄下的其他目錄也可以,比方 “./JRE”之類的)。此時發布目錄中生成的exe文件就在運行時就會調用當前目錄中的JRE,而不是通過系統註冊表及環境變量尋找JRE了,所以只要把整個發布目錄(含exe及JRE的bin和lib)復制到其他計算機上,也就實現了“目標機即便沒有安裝過JRE也可以執行”。當然,這種發布方式無法得到壹個內含JRE的單獨的exe文件。另外,JRE的完整目錄有50M,但是我們的程序只可能調用其中很少的壹部分,妳可以手動為發布目錄中的JRE減肥、去掉不使用的文件,但這需要壹定的經驗。減肥後的JRE根據應用程序的不同,最小可以只有10M左右。
(4) 把java應用程序最後做成applet。
將java applet編入html文件,用瀏覽器方式打開,可以在任何沒有安裝JRE的機器上運行,好比exe文件壹樣(當然在安裝了JRE的計算機上也可以用批處理文件或java命令來運行)。Windows IE打開applet靠的是壹個叫“micosoft VM”的東西,現在該軟件壹般都是自帶的。不過,Windows IE支持的JDK最高版本只能到JDK1.1。如果別人的機器運行不了applet,無非這三個原因:
a. 程序編譯時使用的JDK版本太高,Windows IE不支持。用較老板版本的編譯器重新編譯(v1.1之前)就可以了。比如在dos下javac -target 1.1 *.jav(強制使用JDK1.1編譯源程序)。
b. 用戶的Windows沒有micosoft vm(這種情況比較少見,只有windows XP第壹版等極少數情況)。這種情況下,當客戶的IE每次load applet時候, Windows會提示“沒有download micosoft VM”,他只需從網上下壹個就可以了。
c. 用戶計算機上裝有壹些保護ie的軟件(比如最新的windows sp2有時就會防止java applet的loading)。暫時關閉保護功能就可以了。
(5) 使用JBuilder、exe4j等工具制作成需要JRE支持的exe文件。