我也來做一個最簡單的Java2EXE的運行器
--羅時民
前段時間有空試了一下Java轉成Exe可執(zhí)行文件的幾種方法。想想也自己試著用VC++和Delphi分別做了一個最簡單的例子:
原理:
1.將自己Java做的Application程序打包成可執(zhí)行的Jar文件(在MANIFEST.MF中指定Main-Class: 類名)
2.用VC++,Delphi或其他語言生成可執(zhí)行的EXE文件,這個EXE的功能是調用COMMOND命令" java -jar Jar文件名",以達到利用EXE執(zhí)行Jar文件的作用
3.采用了一個小技巧,即利用copy /b "A.exe"+"B.jar" "C.exe"的DOS 命令,將EXE文件和JAR文件合并成一個C.EXE文件,這樣C.EXE即包含A.EXE文件的內容,又包含B.jar文件的內容. 當合并完成后,C.exe文件就可以用 java -jar C.exe 來執(zhí)行,所以我們在代碼里,只要調用 "java -jar 程序自身的文件名" 就可以了.
缺陷:
1.這是最簡單的方式了,還是沒有脫離JVM
2.沒有配置文件,當需要設置classpath或其他參數(shù)時,則需要改寫該程序
3.可以用WinRar,WinZip工具打開EXE文件(這一點和JBuilder生成的EXE文件一樣)
以下給出代碼:
VC++代碼:
#include "stdafx.h"
#include "resource.h"

#include <stdio.h>
#include <string.h>
#include <math.h>

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )

{
TCHAR exeFullPath[MAX_PATH];
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
char cmd[MAX_PATH+20] = "";
sprintf(cmd,"java.exe -jar \"%s\"",exeFullPath);
WinExec(cmd,SW_HIDE);
return 0;
}

DELPHI代碼:
program Sunking;

uses
Forms,
Windows;

{$R *.res}
begin
WinExec(PChar('java.exe -jar "'+ Application.ExeName+'"'), SW_HIDE);
end.

原代碼下載(含工程及測試文件)