成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

讓Java程序帶著jre一起上路

瀏覽:131日期:2024-06-06 18:17:54
內容: 讓Java程序帶著jre一起上路 原創作者:cleverpig版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明原文地址:http://www.matrix.org.cn/resource/article/43/43721_java_jre.html關鍵詞: java jre 用Java開發程序,發布時總要考慮的問題就是怎么在使用者的機器上裝好JRE。要考慮的問題很多:使用者有沒有能力獨自安裝JRE,使用者已有的JRE和我們需要的版本是不是一致,會不會出現版本問題,等等。 使用.NET要考慮的問題就少些。現在.NET CLR似乎已經很普及了,看好多D版的Win XP都會自己安裝最新的.NET CLR,而且似乎它的安裝界面也比JRE友好些。徹底解決安裝JRE的問題的方案,就是讓我們的應用程序自己背著JRE!這樣,我們的程序就像傳統的Win32應用程序一樣,雙擊就可以執行,不用管所在的機器上是否有JRE,是什么版本的JRE,無論怎樣,我有我自己的!要做到這一點,其實非常容易。 王森在他的《Java深度歷險》(強力推薦這本書,內容少而精)的第一章就解釋了JDK,JRE,JVM之間的關系。解釋了我們執行java.exe時發生的事情。其中提到,java.exe依照一套邏輯來尋找可以用的JRE,首先查找自己所在的目錄下有沒有JRE(據王森講這樣說不確切,我沒有JDK全部的源代碼,在此無從考證);其次查找自己的父目錄下有沒有JRE;最后才是查詢Windows的注冊表。 通常我們在安裝好了JRE的機器上的任何一個目錄下都可以執行java.exe。因為它在安裝時被復制到了windows的system32目錄下,而后者無論如何都會在path環境變量中。這個java.exe最終必然會訪問注冊表來確定真正的JRE的所在地。若我們要求每一個應用程序都自帶JRE,必然不能走這條路。但,邏輯的第二條講,java.exe會在它的父目錄下查找JRE,解決方案就在這一條中。 假設我們的應用程序打好了包,叫做MyApp.jar,放在MyApp的目錄下。我們在MyApp目錄下,可以執行java –jar MyApp.jar來運行我們的程序。我們安裝的是JRE 1.5,在C:Program FilesJavajre1.5.0下。現在,我們只需要簡單的將jre1.5.0目錄搬到MyApp目錄下,順便改個容易寫的名字比如叫jre。現在,我們的應用程序就象這樣:MyApp MyApp.jar Jre Jre1.5.0目錄下的全部內容Java.exe就在jre目錄下的bin目錄中。根據第二條邏輯,java.exe會在它的父目錄中查找jre,實驗證實,它會查找lib目錄,而lib就在jre目錄下。因此,這樣java.exe就會確定jre的所在然后正常執行java程序,不會去管我們是否安裝了JRE,注冊表中是否有注冊項這些雜事了。試一下,在命令行下進入MyApp的目錄下,假設它在C盤,將path指向MyApp下的JRE:set path=c:MyAppjrebin然后運行:java –verbose –jar MyApp.jar加上verbose參數以確定我們確實用了這一套被搬出了家的JRE。程序可以運行,并且在命令行輸出的前幾行,可以看到:[Opened C:MyAppjrelibrt.jar][Opened C:MyAppjrelibjsse.jar][Opened C:MyAppjrelibjce.jar][Opened C:MyAppjrelibcharsets.jar]因此程序讀取的確實是它的私有的JRE。 至此,我們似乎完成了任務。但是現在我們的私有JRE仍不完美,缺點是太大。JRE 1.5有接近70MB,作為我們的私有的JRE,好多內容都是可以拋棄的。Jre目錄下的license都可以不要,bin下的執行文件只需要保留java.exe或者javaw.exe,lib下只要保留rt,jsse,jce,charsets幾個庫就可以了。除了i386和zi兩個子目錄外,其余的子目錄都可以不要。Zi下只需要保留自己地區的子目錄和其下的一些文件就可以。Lib下除了庫之外的屬性文件等等都要保留。這樣清理一番,JRE仍然有接近50MB。還可以繼續清理幾個庫文件里面不需要的內容,這需要仔細的整理,會很費功夫。最好能寫出一個自動工具幫助我們整理它們。從Sun公司上下到的JMF里面附帶的用Java寫的媒體播放器就自帶了JRE,只有幾個MB。 清理過后需要運行幾遍我們的應用程序,以確保我們的JRE不缺少東西。如果我們希望能有一個程序直接啟動我們的應用程序,那就還要費些功夫。最簡單的方法是弄出一個快捷方式來,但是快捷方式的路徑不能是相對的,不方便我們安裝。我想到的方案就是用Win32程序包裝一下。在VS.NET下寫一個Win32小程序:int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow ){ STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess( 'jrebinjavaw.exe',//執行的程序名 'jrebinjavaw.exe -jar MyApp.jar', // 帶參數的執行程序 NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi ) // Pointer to PROCESS_INFORMATION structure. ) { ErrorExit( 'CreateProcess failed.' ); } // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread );} 基本上是按照MSDN文檔中的例子照搬的。將它編譯成一個EXE文件,我們的任務才全部完成。雙擊這個EXE文件,我們的程序啟動了,看起來和傳統的Win32程序沒有兩樣,JRE完全被隱藏在底層。P.S. 使用了這個方案后,我用Wise Installation System制作安裝程序,發現一個非常奇怪的問題,安裝結束后,安裝程序似乎非要運行一個叫做GLJ什么什么,后綴是TMP的程序,還需要JVM,結果就報錯JVM.DLL找不到。安裝總是不成功。我已經禁掉了OCX / DLL / EXE自注冊和卸載支持,為什么還不對?有誰知道是為什么嗎? Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
韩国自拍一区| 久久黄色级2电影| 韩国女主播一区二区三区| 在线免费观看一区二区三区| 欧美videofree性高清杂交| 国产一区二区中文字幕| 日本高清不卡一区| 日韩av电影天堂| 久久国产免费| 亚洲午夜视频在线| 亚洲久久一区二区| 亚洲乱码中文字幕综合| 一区二区视频欧美| 国产精品理论在线观看| 黄色成人91| 亚洲欧洲日韩一区二区三区| 国产精品久久| 国产精品护士白丝一区av| av午夜精品一区二区三区| 日韩欧美国产三级| 国产高清久久久久| 欧美一二三四区在线| 国产成人免费在线观看| 91精品综合久久久久久| 国产一区在线精品| 91精品欧美福利在线观看| 国产精品自拍毛片| 69av一区二区三区| 国产精品正在播放| 日韩欧美中文字幕制服| 国产精品亚洲第一| 欧美videofree性高清杂交| 成人午夜免费av| 精品少妇一区二区三区在线视频| 高清不卡在线观看| 久久久91精品国产一区二区精品| 欧美日本韩国一区二区三区| 中文成人av在线| 亚洲香蕉网站| 亚洲美女一区二区三区| 性色av一区二区怡红| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美中文字幕不卡| 国产福利一区在线| 欧美va在线播放| 欧美日韩综合| 亚洲精品自拍动漫在线| 久久不射网站| 蜜臀国产一区二区三区在线播放| 欧美视频自拍偷拍| 国产一区二区三区视频在线播放| 欧美一级理论性理论a| 欧美一区二区| 一区二区三区在线视频观看58| 久久一综合视频| 黑人精品欧美一区二区蜜桃| 精品国产区一区| 亚洲国产免费看| 日本欧洲一区二区| 欧美xxxxxxxx| 亚洲免费观看| 免费成人在线播放| 精品日韩在线一区| 国产精品观看| 日本女人一区二区三区| 日韩精品一区二区三区四区| 欧美~级网站不卡| 亚洲成人动漫在线免费观看| 7777精品伊人久久久大香线蕉的 | 久久久精品免费网站| 精品二区久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩欧美123| 亚洲欧洲久久| 久久国产生活片100| 欧美韩日一区二区三区四区| 亚洲综合视频一区| 大胆欧美人体老妇| 椎名由奈av一区二区三区| 欧洲生活片亚洲生活在线观看| 床上的激情91.| 亚洲男人电影天堂| 欧美日韩成人一区二区| 欧美三级不卡| 伦理电影国产精品| 国产欧美一二三区| 色噜噜狠狠成人网p站| 欧美伊人久久| 日本va欧美va瓶| 欧美韩日一区二区三区| 欧美在线你懂得| 欧美日韩在线高清| 蜜臀av国产精品久久久久| 国产片一区二区三区| 欧美在线视频全部完| 国产精品成人观看视频免费| 日本在线不卡视频一二三区| 国产欧美日韩三区| 欧美体内she精视频| 国产一区二区中文字幕免费看| 久久精品国产免费| 亚洲色图欧洲色图婷婷| 日韩三级在线免费观看| 亚洲综合社区| 欧美一区二区三区另类| 久久精品噜噜噜成人av农村| 国产精品国产三级国产三级人妇| 欧美久久久久中文字幕| 亚洲看片一区| 北条麻妃国产九九精品视频| 丝袜美腿亚洲色图| 国产女人18毛片水真多成人如厕| 欧美亚洲愉拍一区二区| 999亚洲国产精| 成人精品gif动图一区| 日韩影院在线观看| 日本一区二区三区dvd视频在线| 欧美伊人久久大香线蕉综合69 | 亚洲看片一区| 成人精品视频一区二区三区| 日本在线不卡视频| 亚洲美女精品一区| 久久久国产精华| 777午夜精品免费视频| 午夜在线播放视频欧美| 欧美激情国产日韩| 国产激情视频一区二区在线观看 | 天天色综合成人网| 日本一区二区三区在线不卡 | 一区二区三区久久| 久久噜噜亚洲综合| 欧美精品色一区二区三区| 久久精品道一区二区三区| 欧美人与禽性xxxxx杂性| 国产东北露脸精品视频| 丝瓜av网站精品一区二区| 亚洲色图欧洲色图婷婷| 久久综合久久鬼色| 在线综合视频播放| 91成人看片片| 国产精品久久久免费| 国产欧美日韩不卡免费| 日韩视频一区二区在线观看| 欧美三级视频在线| 久久久一二三| 亚洲精品一二| 欧美午夜免费| 91玉足脚交白嫩脚丫在线播放| 国内久久精品视频| 日本va欧美va瓶| 亚洲午夜电影网| 又紧又大又爽精品一区二区| 国产精品免费免费| 久久综合色一综合色88| 欧美xxxxxxxx| 日韩精品一区二区三区中文不卡| 91精品在线麻豆| 欧美日韩精品一区二区天天拍小说 | 日本成人在线网站| 亚洲一级二级三级在线免费观看| 国产精品久久久久久久久免费相片| 久久综合中文字幕| 精品久久久久久久一区二区蜜臀| 91精品婷婷国产综合久久性色| 欧美日韩国产区一| 色婷婷激情久久| 色婷婷久久综合| 日本精品一区二区三区高清| 久久野战av| 色偷偷一区二区三区| 欧美中文字幕| 色综合久久88色综合天天免费| 久久久久久一区二区| 色哟哟国产精品| 欧美亚洲一区二区在线观看| 欧美中文字幕亚洲一区二区va在线 | 91香蕉视频污| 91啪亚洲精品| 欧美精品三级| 精品91在线| 一区二区三区精品视频在线观看| 亚洲免费高清| 国产伦精品一区二区三| 久久亚洲一区| 欧美丝袜丝交足nylons| 欧美中文字幕一区二区三区| 欧美视频一区二区| 91精品欧美综合在线观看最新| 91精品国产91久久久久久最新毛片| 欧美一区永久视频免费观看| 日韩欧美国产午夜精品| 精品国产91洋老外米糕| 国产亚洲精品7777| 中文字幕亚洲区| 亚洲香蕉伊在人在线观| 日本欧美一区二区三区乱码| 精品伊人久久久久7777人| 国产a区久久久| 欧美尤物一区| 一区二区高清视频|