我也来做一个最简单的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 "stdafx.h"
 #include "resource.h"
#include "resource.h"

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

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

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

 
 
DELPHI代码:
 program Sunking;
program Sunking;

 uses
uses
 Forms,
  Forms,
 Windows;
  Windows;

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

 
 
原代码下载(含工程及测试文件)