电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

讓Java程序帶著jre一起上路

瀏覽:71日期:2024-06-06 18:17:54
內(nèi)容: 讓Java程序帶著jre一起上路 原創(chuàng)作者:cleverpig版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明原文地址:http://www.matrix.org.cn/resource/article/43/43721_java_jre.html關(guān)鍵詞: java jre 用Java開發(fā)程序,發(fā)布時(shí)總要考慮的問題就是怎么在使用者的機(jī)器上裝好JRE。要考慮的問題很多:使用者有沒有能力獨(dú)自安裝JRE,使用者已有的JRE和我們需要的版本是不是一致,會(huì)不會(huì)出現(xiàn)版本問題,等等。 使用.NET要考慮的問題就少些。現(xiàn)在.NET CLR似乎已經(jīng)很普及了,看好多D版的Win XP都會(huì)自己安裝最新的.NET CLR,而且似乎它的安裝界面也比JRE友好些。徹底解決安裝JRE的問題的方案,就是讓我們的應(yīng)用程序自己背著JRE!這樣,我們的程序就像傳統(tǒng)的Win32應(yīng)用程序一樣,雙擊就可以執(zhí)行,不用管所在的機(jī)器上是否有JRE,是什么版本的JRE,無論怎樣,我有我自己的!要做到這一點(diǎn),其實(shí)非常容易。 王森在他的《Java深度歷險(xiǎn)》(強(qiáng)力推薦這本書,內(nèi)容少而精)的第一章就解釋了JDK,JRE,JVM之間的關(guān)系。解釋了我們執(zhí)行java.exe時(shí)發(fā)生的事情。其中提到,java.exe依照一套邏輯來尋找可以用的JRE,首先查找自己所在的目錄下有沒有JRE(據(jù)王森講這樣說不確切,我沒有JDK全部的源代碼,在此無從考證);其次查找自己的父目錄下有沒有JRE;最后才是查詢Windows的注冊(cè)表。 通常我們?cè)诎惭b好了JRE的機(jī)器上的任何一個(gè)目錄下都可以執(zhí)行java.exe。因?yàn)樗诎惭b時(shí)被復(fù)制到了windows的system32目錄下,而后者無論如何都會(huì)在path環(huán)境變量中。這個(gè)java.exe最終必然會(huì)訪問注冊(cè)表來確定真正的JRE的所在地。若我們要求每一個(gè)應(yīng)用程序都自帶JRE,必然不能走這條路。但,邏輯的第二條講,java.exe會(huì)在它的父目錄下查找JRE,解決方案就在這一條中。 假設(shè)我們的應(yīng)用程序打好了包,叫做MyApp.jar,放在MyApp的目錄下。我們?cè)贛yApp目錄下,可以執(zhí)行java –jar MyApp.jar來運(yùn)行我們的程序。我們安裝的是JRE 1.5,在C:Program FilesJavajre1.5.0下。現(xiàn)在,我們只需要簡(jiǎn)單的將jre1.5.0目錄搬到MyApp目錄下,順便改個(gè)容易寫的名字比如叫jre。現(xiàn)在,我們的應(yīng)用程序就象這樣:MyApp MyApp.jar Jre Jre1.5.0目錄下的全部?jī)?nèi)容Java.exe就在jre目錄下的bin目錄中。根據(jù)第二條邏輯,java.exe會(huì)在它的父目錄中查找jre,實(shí)驗(yàn)證實(shí),它會(huì)查找lib目錄,而lib就在jre目錄下。因此,這樣java.exe就會(huì)確定jre的所在然后正常執(zhí)行java程序,不會(huì)去管我們是否安裝了JRE,注冊(cè)表中是否有注冊(cè)項(xiàng)這些雜事了。試一下,在命令行下進(jìn)入MyApp的目錄下,假設(shè)它在C盤,將path指向MyApp下的JRE:set path=c:MyAppjrebin然后運(yùn)行:java –verbose –jar MyApp.jar加上verbose參數(shù)以確定我們確實(shí)用了這一套被搬出了家的JRE。程序可以運(yùn)行,并且在命令行輸出的前幾行,可以看到:[Opened C:MyAppjrelibrt.jar][Opened C:MyAppjrelibjsse.jar][Opened C:MyAppjrelibjce.jar][Opened C:MyAppjrelibcharsets.jar]因此程序讀取的確實(shí)是它的私有的JRE。 至此,我們似乎完成了任務(wù)。但是現(xiàn)在我們的私有JRE仍不完美,缺點(diǎn)是太大。JRE 1.5有接近70MB,作為我們的私有的JRE,好多內(nèi)容都是可以拋棄的。Jre目錄下的license都可以不要,bin下的執(zhí)行文件只需要保留java.exe或者javaw.exe,lib下只要保留rt,jsse,jce,charsets幾個(gè)庫就可以了。除了i386和zi兩個(gè)子目錄外,其余的子目錄都可以不要。Zi下只需要保留自己地區(qū)的子目錄和其下的一些文件就可以。Lib下除了庫之外的屬性文件等等都要保留。這樣清理一番,JRE仍然有接近50MB。還可以繼續(xù)清理幾個(gè)庫文件里面不需要的內(nèi)容,這需要仔細(xì)的整理,會(huì)很費(fèi)功夫。最好能寫出一個(gè)自動(dòng)工具幫助我們整理它們。從Sun公司上下到的JMF里面附帶的用Java寫的媒體播放器就自帶了JRE,只有幾個(gè)MB。 清理過后需要運(yùn)行幾遍我們的應(yīng)用程序,以確保我們的JRE不缺少東西。如果我們希望能有一個(gè)程序直接啟動(dòng)我們的應(yīng)用程序,那就還要費(fèi)些功夫。最簡(jiǎn)單的方法是弄出一個(gè)快捷方式來,但是快捷方式的路徑不能是相對(duì)的,不方便我們安裝。我想到的方案就是用Win32程序包裝一下。在VS.NET下寫一個(gè)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',//執(zhí)行的程序名 'jrebinjavaw.exe -jar MyApp.jar', // 帶參數(shù)的執(zhí)行程序 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文檔中的例子照搬的。將它編譯成一個(gè)EXE文件,我們的任務(wù)才全部完成。雙擊這個(gè)EXE文件,我們的程序啟動(dòng)了,看起來和傳統(tǒng)的Win32程序沒有兩樣,JRE完全被隱藏在底層。P.S. 使用了這個(gè)方案后,我用Wise Installation System制作安裝程序,發(fā)現(xiàn)一個(gè)非常奇怪的問題,安裝結(jié)束后,安裝程序似乎非要運(yùn)行一個(gè)叫做GLJ什么什么,后綴是TMP的程序,還需要JVM,結(jié)果就報(bào)錯(cuò)JVM.DLL找不到。安裝總是不成功。我已經(jīng)禁掉了OCX / DLL / EXE自注冊(cè)和卸載支持,為什么還不對(duì)?有誰知道是為什么嗎? 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
標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 北京中创汇安科贸有限公司 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 太阳能发电系统-太阳能逆变器,控制器-河北沐天太阳能科技首页 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | 酒万铺-酒水招商-酒水代理 | AR开发公司_AR增强现实_AR工业_AR巡检|上海集英科技 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 河南档案架,档案密集架,手动密集架,河南密集架批发/报价 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 淄博不锈钢无缝管,淄博不锈钢管-鑫门物资有限公司 | 防爆电机_ybx3系列电机_河南省南洋防爆电机有限公司 | 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 岸电电源-60HZ变频电源-大功率变频电源-济南诚雅电子科技有限公司 | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | 广州云仓代发-昊哥云仓专业电商仓储托管外包代发货服务 | 重庆私家花园设计-别墅花园-庭院-景观设计-重庆彩木园林建设有限公司 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 脑钠肽-白介素4|白介素8试剂盒-研域(上海)化学试剂有限公司 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 间甲酚,间甲酚厂家-山东祥东新材料 | 2025第九届世界无人机大会| 宜兴紫砂壶知识分享 - 宜兴壶人| 广州食堂承包_广州团餐配送_广州堂食餐饮服务公司 - 旺记餐饮 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 档案密集架,移动密集架,手摇式密集架,吉林档案密集架-厂家直销★价格公道★质量保证 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 818手游网_提供当下热门APP手游_最新手机游戏下载 |