Eclipse_java文件打包成exe文件详解java代码打包exe_第1页
Eclipse_java文件打包成exe文件详解java代码打包exe_第2页
Eclipse_java文件打包成exe文件详解java代码打包exe_第3页
Eclipse_java文件打包成exe文件详解java代码打包exe_第4页
Eclipse_java文件打包成exe文件详解java代码打包exe_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Eclipse java文件打包成exe文件详解java代码打包exe现在有很多的工具将Java代码打包为exe文件,执行时不需要再编写批处理文件,或者在命令行输入长长的classpath信息,为用户使用提供了很大的方便。这也是很多商业软件常常使用的方法。将Java代码打包为exe文件,一般需要两个步骤:1.编写本地代码,创建虚拟机,加载并执行Main Class。2. 将Java代码打包为jar文件,并与本地代码exe文件合并。 下面的代码,会加载jvm.dll,并调用 JNI_CreateJavaVM 导出函数创建 Java 虚拟机,得到 JNIEnv 指针,然后调用 FindClass

2、查找 Main Class ,之后调用 GetStaticMethodID 方法得到 main 方法,并执行 main 方法。代码如下:#include#include/#pragmacomment(linker,/subsystem:console/entry:mainCRTStartup)#pragmacomment(linker,/subsystem:windows/entry:WinMainCRTStartup)typedefjint(JNICALL*JNICREATEPROC)(JavaVM*,void*,void*);boolsetStream(JNIEnv*env,constch

3、ar*pszFileName,constchar*pszMethod);/启动java虚拟机方法/boolmain(intargc,char*argv)intWINAPIWinMain(HINSTANCEhInst,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow)/jvm动态库的路径constcharszJvmPath=d:jdk1.5.0_07jrebinserverjvm.dll;/java虚拟机的启动参数,每个参数写一项,不能合在一起写intnOptionCount=2;JavaVMOptionoptions2;options1.opti

4、onString=-Xmx256M;/设置classpathoptions0.optionString=-Djava.class.path=./Test.exe;JavaVMInitArgsvm_args;vm_args.version=JNI_VERSION_1_4;vm_args.options=options;vm_args.nOptions=nOptionCount;vm_args.ignoreUnrecognized=JNI_TRUE;/启动类,注意分割符是/,例如启动类test.JTest应该写成test/JTestconstcharszStartClass=com/primeto

5、n/test/TestClass;/启动方法,通常是main函数,你也可以设定成其他函数constcharszStartMethod=main;/重导向文件constcharszStdoutFileName=stdout.txt;constcharszStderrFileName=stderr.txt;/java程序的命令行参数intnParamCount=2;constchar*szParams2=arg1,arg2;/加载JVM。HINSTANCEjvmDll=LoadLibrary(szJvmPath);if(jvmDll=NULL)printf(加载JVM动态库错误。%l,:GetLa

6、stError();returnfalse;/查找JNI_CreateJavaVM过程。JNICREATEPROCjvmCreateProc=(JNICREATEPROC)GetProcAddress(jvmDll,JNI_CreateJavaVM);if(jvmCreateProc=NULL)FreeLibrary(jvmDll);printf(查找JNI_CreateJavaVM过程错误。%l,:GetLastError();returnfalse;/创建JVM。JNIEnv*env;JavaVM*jvm;jintr=(jvmCreateProc)(&jvm,(void*)&env,&vm

7、_args);if(rFindClass(szStartClass);if(env-ExceptionCheck()=JNI_TRUE|serviceClass=NULL)env-ExceptionDescribe();env-ExceptionClear();FreeLibrary(jvmDll);printf(加载启动类失败。);returnfalse;/启动方法jmethodIDmid=env-GetStaticMethodID(serviceClass,szStartMethod,(Ljava/lang/String;)V);if(env-ExceptionCheck()=JNI_TR

8、UE|mid=NULL)env-ExceptionDescribe();env-ExceptionClear();FreeLibrary(jvmDll);printf(查找启动方法失败。);returnfalse;/查找String类。jclassstringClass=env-FindClass(java/lang/String);if(env-ExceptionCheck()=JNI_TRUE|stringClass=NULL)env-ExceptionDescribe();env-ExceptionClear();FreeLibrary(jvmDll);printf(查找String类失

9、败。);returnfalse;jstringjstr;jobjectArrayargs=0;args=env-NewObjectArray(2,stringClass,0);for(inti=0;iNewStringUTF(szParamsi);if(jstr=0)printf(分配String失败);if(env-ExceptionOccurred()env-ExceptionDescribe();env-ExceptionClear();returnfalse;env-SetObjectArrayElement(args,i,jstr);if(env-ExceptionCheck()=J

10、NI_TRUE)printf(设置参数失败);if(env-ExceptionOccurred()env-ExceptionDescribe();env-ExceptionClear();returnfalse;/调用启动类的启动方法启动Java程序/env-CallStaticVoidMethod(serviceClass,mid,parameterArray);env-CallStaticVoidMethod(serviceClass,mid,args);if(env-ExceptionCheck()=JNI_TRUE)env-ExceptionDescribe();env-Excepti

11、onClear();FreeLibrary(jvmDll);returnfalse;MSGmsg;while(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMessage(&msg);returntrue;/设置输出流的方法boolsetStream(JNIEnv*env,constchar*pszFileName,constchar*pszMethod)intpBufferSize=1024;char*pBuffer=newcharpBufferSize;/创建字符串对象。jstringpathString=env-NewSt

12、ringUTF(pszFileName);if(env-ExceptionCheck()=JNI_TRUE|pathString=NULL)env-ExceptionDescribe();env-ExceptionClear();printf(创建字符串失败。);returnfalse;/查找FileOutputStream类。jclassfileOutputStreamClass=env-FindClass(java/io/FileOutputStream);if(env-ExceptionCheck()=JNI_TRUE|fileOutputStreamClass=NULL)env-Exc

13、eptionDescribe();env-ExceptionClear();printf(查找FileOutputStream类失败。);returnfalse;/查找FileOutputStream类构造方法。jmethodIDfileOutputStreamConstructor=env-GetMethodID(fileOutputStreamClass,(Ljava/lang/String;)V);if(env-ExceptionCheck()=JNI_TRUE|fileOutputStreamConstructor=NULL)env-ExceptionDescribe();env-Ex

14、ceptionClear();printf(查找FileOutputStream类构造方法失败。);returnfalse;/创建FileOutputStream类的对象。jobjectfileOutputStream=env-NewObject(fileOutputStreamClass,fileOutputStreamConstructor,pathString);if(env-ExceptionCheck()=JNI_TRUE|fileOutputStream=NULL)env-ExceptionDescribe();env-ExceptionClear();printf(创建FileO

15、utputStream类的对象失败。);returnfalse;/查找PrintStream类。jclassprintStreamClass=env-FindClass(java/io/PrintStream);if(env-ExceptionCheck()=JNI_TRUE|printStreamClass=NULL)env-ExceptionDescribe();env-ExceptionClear();printf(查找PrintStream类失败。);returnfalse;/查找PrintStream类构造方法。jmethodIDprintStreamConstructor=env-

16、GetMethodID(printStreamClass,(Ljava/io/OutputStream;)V);if(env-ExceptionCheck()=JNI_TRUE|printStreamConstructor=NULL)env-ExceptionDescribe();env-ExceptionClear();printf(查找PrintStream类构造方法失败。);returnfalse;/创建PrintStream类的对象。jobjectprintStream=env-NewObject(printStreamClass,printStreamConstructor,file

17、OutputStream);if(env-ExceptionCheck()=JNI_TRUE|printStream=NULL)env-ExceptionDescribe();env-ExceptionClear();printf(创建PrintStream类的对象失败。);returnfalse;/查找System类。jclasssystemClass=env-FindClass(java/lang/System);if(env-ExceptionCheck()=JNI_TRUE|systemClass=NULL)env-ExceptionDescribe();env-ExceptionCl

18、ear();printf(查找System类失败。);returnfalse;/查找System类设置方法。jmethodIDsetStreamMethod=env-GetStaticMethodID(systemClass,pszMethod,(Ljava/io/PrintStream;)V);if(env-ExceptionCheck()=JNI_TRUE|setStreamMethod=NULL)env-ExceptionDescribe();env-ExceptionClear();printf(查找System类设置方法失败。);returnfalse;/设置System类的流。env-CallStaticVoidMethod(systemClass,setStreamMethod,printStream);if(env-ExceptionCheck()=JNI_TRUE)env-Excep

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论