寫個主要想法是java 版本眾多,也不知道客戶安裝那個版本java. 還有就是為瞭簡化發佈工作,可以直接把文檔發送到客戶端就可以瞭.
首要有必要瞭解一下java.exe 如何尋找JRE庫的:
當在控制臺執行java.exe,操作系統尋找JRE的方式如下:
1) 先找當前目錄下有沒有JRE
2)再找父目錄下有沒有JRE
3)接著在PATH路徑中找JRE
4)註冊表HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Runtime Environment 查看CurrentVersion的鍵值指向哪個JRE
2.JRE類庫查找
JRE自帶的基礎類庫主要是JRElib t.jar這個文件,包括瞭Java2平臺標準版的所有類庫。和JRE的版本一致。
JRE中由ClassLoader負責查找和加載程序引用到的類庫,基礎類庫ClassLoader會到rt.jar中自動加載,其它的類庫,ClassLoader在環境變量CLASSPATH指定的路徑中搜索,按照先來先到的原則,放在CLASSPATH前面的類庫先被搜到,Java程序啟動之前建議先把PATH和CLASSPATH環境變量設好,OS通過PATH來找JRE,確定基礎類庫rt.jar的位置,JRE的 ClassLoader通過CLASSPATH找其它類庫。但有時候會出現這樣的情況,希望替換基礎類庫中的類庫,那麼也可以簡單的通過 -Djava.endrosed.path=…參數傳遞給java.exe,於是ClassLoader會先於基礎類庫使用 java.endrosed.path參數指定路徑的類庫。因此Java的版本管理是非常簡單有效的,也許很原始,不過很好用,簡單就不容易出錯。
3.Java的虛擬機啟動和加載類庫
在Console執行java.exe xxx命令以後,如前所述的尋找JRE,OS找到JRE目錄,根據java.exe的傳遞參數,選擇加載Server版的jvm.dll還是Client 版的jvm.dll,然後加載jvm.dll,把控制權交給jvm.dll。
接下來,jvm.dll進行初始化,分配內存等等動作,然後在CLASSPATH路徑中尋找class,找到class以後,尋找class中的程序入口點Main函數,然後從Main函數執行程序,在執行過程中,使用ClassLoader動態加載一系列引用到的類。當調用到native方法時,jvm.dll告訴OS在JREin目錄下尋找某某DLL文件,調入內存,於是實現瞭JNI調用。
最後簡單說運行實現我們希望目的目錄結構(以test目錄為例):
test 存項目java文件生成的.class,.jar 等文件.
test/jre/bin 復制對就jdk中的 bin目錄就可以。
test/jre/lib 復制對就jdk中的 jre/lib 目錄就可以。
建立以上目錄結果之後就可以將test/jre/bin/java.exe 發送到桌面快捷方式。
然後修改一下那快捷快方式 目標(T)標位 改成 …../test/jre/bin/java.exe test ,
這裡要註意的是 起始位置(S) 一起在改一下!如下:…../test/ 這個為什麼就不用我說瞭,自己體會吧。:D
對瞭,再煩一下,使用javaw.exe 試試,可以不要那個該死的console窗口哦。希望上面的文章對大傢有所幫助。