將java程序打包成exe |
這個(gè)不知選啥分類(lèi)了。。。。雖說(shuō)是delphi程序,但是操作的核心卻是java。。。不管了。。還是點(diǎn)了個(gè) java類(lèi)。。。下面進(jìn)入正題: 從java剛出來(lái)時(shí),就研究這個(gè)問(wèn)題了,由于java是跨平臺(tái)的,如果打包成exe,就變成了只有windows下才能使用的程序,與java的本來(lái)意愿不符。所以我一直在尋找一種既能打包,又能不破壞兼容性的方法。 網(wǎng)上有許多java打包工具,都能把java的class文件弄成exe,但是如果想要兼容其他的平臺(tái),那就只有自己動(dòng)手寫(xiě)代碼了。在此,我選用了Delphi對(duì)java程序進(jìn)行打包,因?yàn)橹挥蠨elphi才能夠直接跨平臺(tái),它與java的配合是相當(dāng)默契的。經(jīng)過(guò)打包的程序能同時(shí)在windows和Red Hat linux下運(yùn)行。 下面給出源代碼: 首先制作一個(gè)資源文件,命名為Java.rc,內(nèi)容如下: App javafile App.class 然后保存,在控制臺(tái)下用Brcc32 Java.rc命令行編譯 編譯完成后生成一個(gè)Java.res文件,在程序中引用這個(gè)文件就相當(dāng)于導(dǎo)入了該class文件 program JavaApp; uses Registry,Classes, {$IFDEF MSWINDOWS}Windows{$ENDIF} {$IFDEF LINUX}Qt,QTypes,QStyle{$ENDIF}; {$R java.RES} {$R *.res} var {$IFDEF MSWINDOWS}Reg:TRegistry;{$ENDIF} Java_HOME:string; Java:string; JavaStream:TResourceStream; begin {$IFDEF MSWINDOWS} Reg:=TRegistry.Create; Reg.RootKey:=HKEY_LOCAL_MACHINE; Reg.OpenKey('SYSTEM\ControlSet001\Control\Session Manager\Environment',true); Java_HOME:=reg.ReadString('JAVA_HOME'); Reg.Free; {$ELSE $IFDEF LINUX} Java_HOME:='Root/Bin/J2SDK'; {$ENDIF} {$IFDEF MSWINDOWS} Java:=Java_HOME+'\Bin\Java.exe'; {$ELSE $IFDEF LINUX} Java:=Java_HOME+'/Bin/Java.so'; {$ENDIF} JavaStream:=TResourceStream.Create(HInstance,'App','javafile'); JavaStream.SaveToFile('App.class');
{$IFDEF MSWINDOWS} WinExec(PChar(Java+' App'),SW_Hide); {$ELSE $IFDEF LINUX} asm Call RH.Run(PChar(Java+' App')); end; {$ENDIF} JavaStream.Free; end. 一切搞定,現(xiàn)在可以運(yùn)行EXE了。如果要放到Linux下運(yùn)行,只需要把EXE改成SO就行了 |
|
聯(lián)系客服