Eclipse java 文件打包成 exe 文件
详解 java 代码打包 exe
现在有很多的工具将 Java 代码打包为 exe 文件,执行时不需要再编写批处理文件,或者在命令行输入长
长的 classpath 信息,为用户使用提供了很大的方便。这也是很多商业软件常常使用的方法。
将 Java 代码打包为 exe 文件,一般需要两个步骤:
1. 编写本地代码,创建虚拟机,加载并执行 Main Class。
2. 将 Java 代码打包为 jar 文件,并与本地代码 exe 文件合并。
下面的代码,会加载 jvm.dll
,并调用 JNI_CreateJavaVM
导出函数创建 Java
虚拟机,得到 JNIEnv 指
针,然后调用 FindClass
查找 Main Class
,之后调用 GetStaticMethodID
方法得到 main 方法,并执
行 main 方法。代码如下:
#include <windows.h>
#include <jni.h>
//#pragma comment( linker, "/subsystem:"console" /entry:"mainCRTStartup"" )
#pragma
comment( linker, "/subsystem:"windows" /entry:"WinMainCRTStartup"" )
typedef jint (JNICALL *JNICREATEPROC)(JavaVM **,
void
**,
void
*);
bool
setStream(JNIEnv *env,
const
char
* pszFileName,
const
char
* pszMethod);
//
启动
java
虚拟机方法
//bool main(int argc,char *argv[])
int
WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInstance,PSTR szCmdLine,
int
iC
mdShow)
{
//jvm
动态库的路径
const
char
szJvmPath[] = "d:\jdk1.5.0_07\jre\bin\server\jvm.dll";
//java
虚拟机的启动参数,每个参数写一项,不能合在一起写
int
nOptionCount = 2;
JavaVMOption options[2];
options[1].optionString = "-Xmx256M";
//
设置
classpath
options[0].optionString = "-Djava.class.path=./Test.exe";
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_4;
vm_args.options = options;
vm_args.nOptions = nOptionCount;
vm_args.ignoreUnrecognized = JNI_TRUE;
//
启动类
,
注意分割符是
/
,例如启动类
test.JTest
应该写成
test/JTest
const
char
szStartClass[] = "com/primeton/test/TestClass";
//
启动方法,通常是
main
函数,你也可以设定成其他函数
const
char
szStartMethod[] = "main";
//
重导向文件
const
char
szStdoutFileName[] = "stdout.txt";
const
char
szStderrFileName[] = "stderr.txt";