我也来做一个最简单的Java2EXE的运行器
--罗时民
前段时间有空试了一下Java转成Exe可执行文件的几种方法。想想也自己试着用VC++和Delphi分别做了一个最简单的例子:
原理:
1.将自己Java做的Application程序打包成可执行的Jar文件(在MANIFEST.MF中指定Main-Class: 类名)
2.用VC++,Delphi或其他语言生成可执行的EXE文件,这个EXE的功能是调用COMMOND命令" java -jar Jar文件名",以达到利用EXE执行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 来执行,所以我们在代码里,只要调用 "java -jar 程序自身的文件名" 就可以了.
缺陷:
1.这是最简单的方式了,还是没有脱离JVM
2.没有配置文件,当需要设置classpath或其他参数时,则需要改写该程序
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.
原代码下载(含工程及测试文件)