Java程序的发布一般都是通过JAR发布,但是通过JAR发布一般不是很稳定,因为和系统环境相关,在有的系统环境比较混乱的情况下,无法执行JAR文件,因此一般通过捆绑JRE和开发一个外壳程序来达到。
捆绑JRE一般是直接拷贝到程序目录下,有安装程序,如InstallShield或InstallAnywhere即可完成。
而外壳程序则需要自己开发。示范代码如下:
typedef struct
{
CreateJavaVM_t CreateJavaVM;
GetDefaultJavaVMInitArgs_t GetDefaultJavaVMInitArgs;
} InvocationFunctions;
...
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd )
{
SetThreadLocale(GetSystemDefaultLCID());
//JRE环境和程序环境的获取
JavaVMOption options[3];
JavaVMInitArgs vm_args;
...
//确定程序的运行参数
JavaVM *vm = 0;
JNIEnv *env = 0;
jobjectArray mainArgs;
InvocationFunctions ifn;
LoadJavaVM(jvmPath, &ifn);
ifn.CreateJavaVM(&vm, (void**)&env, &vm_args);
//获取主类以及程序运行参数
...
//调用主函数
env->CallStaticVoidMethod(mainClass, mainMethodID, mainArgs);
vm->DetachCurrentThread();
}