【原創】將Java程式變成可執行檔案的簡單方法

銀河使者發表於2009-04-15
本文為原創,如需轉載,請註明作者和出處,謝謝!

launcher下載

    執行Java程式(SWING或SWT的桌面程式)可以直接執行.class檔案或將所有的.class檔案及相關的其他檔案壓縮成.jar檔案,然後使 用javaw -jar my.jar來執行程式(其中my.jar是一個jar檔名,可以是任何指定的jar檔案)。但在windows下,使用者習慣直接執行一個exe來執行 程式。在網上有很多程式可以將my.jar或.class檔案直接轉換成exe檔案。但很多都是將jar或.class檔案放到exe裡成,這樣不太方 便。有些工具,如javalauncher可以使用一個exe程式(用c語言寫的)來呼叫jar檔案。但有時需要在執行程式之間做些其他的工具,例如,在 客戶端動態從服務端下載最新版本的程式。因此,在本文將使用delphi2009實現一個簡單的可以呼叫jar檔案的程式,讀者可以對這個程式進行任何擴 展,本文還提供了該程式的原始碼和exe檔案。
    使用delphi建立一個VCL工程。在本程式中不需要form,因此,可以將預設生成的form刪除。實際上,我們只需要呼叫ShellExecute方法就可以通過javaw命令來執行jar檔案,程式碼如下:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtshellexecute(GetActiveWindow, 'open','javaw', '-jar my.jar''', SW_NORMAL);

    其中GetActiveWindow方法獲得當前視窗的控制程式碼。在本程式中使用了一個config.ini檔案來指定要執行的jar檔案,實現的完整程式碼如下:
program launcher;
uses
  Forms,
  windows,shellapi, inifiles, sysUtils;

{$R 
*.res}
var
  ini: tinifile;
  JarFile: String;
begin
  Application.Initialize;
  ini :
= tinifile.Create(extractfilepath(application.ExeName) +  'config.ini');
  JarFile :
= ini.ReadString('config''JarFile''');
  shellexecute(GetActiveWindow, 
'open','javaw', PWideChar('-jar ' + JarFile), '', SW_NORMAL);
  ini.Free;
  Application.Run;
end.

    在和exe相同的目錄下建立一個config.ini檔案,內容如下:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt[config]
JarFile 
= jars\swt.jar
    其中swt.jar檔案是執行的jar檔案,要放在當前目錄的jars目錄中。現在的目錄結果如下:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtlauncher.exe
config.ini
jars\swt.jar

    其中launcher.exe和config.ini也被包含在本文的下載檔案中。讀者只需要修改config.ini檔案中的相應的jar檔名即可。 也可以將launcher.exe改成其它的檔名。還有就是要修改launcher.exe檔案的圖示,可以直接在delphi2009(低版本的 delphi也可以,最好7.0以上)中改,也可以找一些編輯二進位制資源的程式,直接開啟launcher.exe檔案,修改其中的圖示。

    當然,本程式也可以使用任何可生成原生可執行檔案的程式語言開發,如C、C++等。

    OK,現在就可以通過雙擊launcher.exe檔案來呼叫jar包了。要想對launcher進行擴充套件,就直接修改原始碼吧。其實這個實現是非常非常地簡單!!!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-589242/,如需轉載,請註明出處,否則將追究法律責任。

相關文章