如何讓你的java程序可以在任何機器上雙擊運行
在安裝好了JRE的機器上的任何一個目錄下都可以執行java.exe。因為它在安裝時被復制到了windows的system32目錄下,而后者無論如何都會在path環境變量中。這個java.exe
最終必然會訪問注冊表來確定真正的JRE的所在地。如果我們沒有安裝JRE而只是安裝了jdk那么我們就需要設定環境變量,當環境變量設定好了之后,我們就可以在任意目錄下執行
javac.exe或java.exe。若我們要求每一個應用程序都自帶JRE,這兩種辦法都不行。但,java.exe會在它的父目錄下查找JRE。
假設我們的應用程序打好了包,叫做JavaApplication.jar,放在JavaCode的目錄下。我們在JavaCode目錄下,可以執行java -jar JavaApplication.jar來運行我們的程序。
我們安裝的JRE 在d:\Java\jre1.5.0下。現在,我們只需要將jre1.5.0目錄復制到JavaCode目錄下,改個比較容易寫的名字比如叫jre。現在,JavaCode目錄中有如下的內容:
JavaCode :
JavaApplication.jar
Jre:
Jre1.5.0目錄下的全部內容(不包括Jre1.5.0目錄本身,主要包括其中的bin目錄和lib目錄)
Java.exe就在jre目錄下的bin目錄中。java.exe會在它的父目錄中查找jre,實驗證實,它會查找lib目錄,而lib就在jre目錄下。因此,這樣java.exe就會確定jre的所在然后正常
執行java程序,不會去管我們是否安裝了JRE,注冊表中是否有注冊項這些雜事了。
檢查一下是否使用了JavaCode目錄下的JRE
運行cmd在命令行下進入JavaCode的目錄(假設它在E盤),將path指向JavaCode下的JRE:
set path=e:\JavaCode\jre\bin
java -verbose -jar JavaApplication.jar
JRE 1.5有70MB作為私有JRE顯然太大了,但其中好多內容都是可以不要的。Jre目錄下的license都可以不要,bin下的執行文件只需要保留java.exe或者javaw.exe,lib下只要
保留rt,jsse,jce,charsets幾個庫就可以了。除了i386和zi兩個子目錄外,其余的子目錄都可以不要。Zi下只需要保留自己地區的子目錄和其下的一些文件就可以。Lib下除了
庫之外的屬性文件等等都要保留。每次清理調一些不要的內容都要運行幾遍我們的應用程序,以確保我們的JRE不缺少東西。
如果我們希望能像VC等一樣有的.exe文件可以直接直接啟動我們的應用程序,那么最簡單的方法是寫一個P處理教本。
在一個.txt文件中比如說Autotun.txt像這樣寫:
set path=..\jre\bin
java -jar JavaApplication.jar
這樣在Java程序啟動時,加載的DOS窗口一直出現,直到你關閉了Java程序才一起關閉。如果你想在運行你的程序時避免這個DOS窗口可以這樣寫:
start javaw -jar JavaApplication.jar
DOS窗口還是會一閃而過,因為javaw是一個需要dos加載的命令。
然后這個.txt文件的后綴txt改成bat或cmd。最后將這個腳本Autotun.bat或Autotun.cmd放在JavaCode目錄下即可
From: http://www.javaresearch.org/article/53674.htm