window JNI_CreateJavaVM启动java程序
https://blog.csdn.net/earbao/article/details/51889605
- #define _CRT_SECURE_NO_WARNINGS 1
- #include <stdio.h>
- #include "jni.h"
- #include <stdlib.h>
- #include <windows.h>
- #include <tchar.h>
- //#pragma comment(lib, "jvm.lib")
- #define PATH_SEPARATOR ';' /* define it to be ':' on Solaris */
- #define USER_CLASSPATH "." /* where Prog.class is */
- void testEnv()
- {
- #ifdef _WIN32
- CHAR dir[1024],path[1024];
- GetCurrentDirectoryA(MAX_PATH, dir);
- sprintf(path, "set PATH=%s\\jre\\bin\\client;.;", dir);
- system(path);
- printf("%s\n", path);
- /**
- //set PATH=%PATH%;%currentdir%\jre\bin\client;
- TCHAR dir[1024];
- GetCurrentDirectoryA(MAX_PATH, dir);
- CHAR p[1024], path[1024];
- GetEnvironmentVariableA("PATH", p, 1024);
- sprintf("PATH = %s\n", p);
- sprintf(path, "%s;%s\\jre\\bin\\client", p, dir);
- system(path);
- printf("%s\n", path);
- GetEnvironmentVariableA("PATH", path, 1024);
- printf("PATH = %s\n", path);
- */
- #else
- char * p;
- if ((p = getenv("USER")))
- printf("USER = %s\n", p);
- setenv("USER", "test", 1);
- printf("USER = %s\n", getenv("USER"));
- unsetenv("USER");
- printf("USER = %s\n", getenv("USER"));
- #endif // __WIN32
- }
- //window JNI_CreateJavaVM启动java程序
- int main(int argc, char* argv[])
- {
- JNIEnv *env;
- JavaVM *jvm;
- jint res;
- jclass cls;
- jmethodID mid;
- jstring jstr;
- jclass stringClass;
- jobjectArray args;
- testEnv();
- CHAR dir[1024], path[1024];
- GetCurrentDirectoryA(MAX_PATH, dir);
- sprintf(path, "%s\\jre\\bin\\client\\jvm.dll", dir);
- typedef jint (*JNI_CreateJavaVMT)(JavaVM **pvm, void **penv, void *args);
- JNI_CreateJavaVMT pJNI_CreateJavaVM = (JNI_CreateJavaVMT)GetProcAddress(LoadLibraryA(path), "JNI_CreateJavaVM");
- if (pJNI_CreateJavaVM == NULL)
- {
- printf("pJNI_CreateJavaVM == NULL\n");
- }
- else
- {
- printf("pJNI_CreateJavaVM != NULL\n");
- }
- #ifdef JNI_VERSION_1_2
- JavaVMInitArgs vm_args;
- JavaVMOption options[1];
- options[0].optionString ="-Djava.class.path=.";
- vm_args.version = 0x00010002;
- vm_args.options = options;
- vm_args.nOptions = 1;
- vm_args.ignoreUnrecognized = JNI_TRUE;
- /* Create the Java VM */
- res = pJNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
- #else
- JDK1_1InitArgs vm_args;
- char classpath[1024];
- vm_args.version = 0x00010001;
- JNI_GetDefaultJavaVMInitArgs(&vm_args);
- /* Append USER_CLASSPATH to the default system class path */
- sprintf(classpath, "%s%c%s",
- vm_args.classpath, PATH_SEPARATOR, USER_CLASSPATH);
- vm_args.classpath = classpath;
- /* Create the Java VM */
- res = JNI_CreateJavaVM(&jvm, &env, &vm_args);
- #endif /* JNI_VERSION_1_2 */
- if (res < 0) {
- fprintf(stderr, "Can't create Java VM\n");
- exit(1);
- }
- cls = (*env)->FindClass(env, "Prog");
- if (cls == NULL) {
- goto destroy;
- }
- mid = (*env)->GetStaticMethodID(env, cls, "main","([Ljava/lang/String;)V");
- if (mid == NULL) {
- goto destroy;
- }
- jstr = (*env)->NewStringUTF(env, " from C!");
- if (jstr == NULL) {
- goto destroy;
- }
- stringClass = (*env)->FindClass(env, "java/lang/String");
- args = (*env)->NewObjectArray(env, 1, stringClass, jstr);
- if (args == NULL) {
- goto destroy;
- }
- (*env)->CallStaticVoidMethod(env, cls, mid, args);
- destroy:
- if ((*env)->ExceptionOccurred(env)) {
- (*env)->ExceptionDescribe(env);
- }
- (*jvm)->DestroyJavaVM(jvm);
- }
- import java.io.IOException;
- public class Prog {
- public static void main(String[] args) throws IOException {
- //System.out.println(args.length);
- if(args.length>0)
- {
- System.out.println("Hello World " + args[0]);
- }else{
- System.out.println("Hello World ");
- }
- System.in.read();
- }
- }
exe通过jni调用Java程序
- #define _CRT_SECURE_NO_WARNINGS 1
- #include <stdio.h>
- #include "jni.h"
- #include <stdlib.h>
- #include <windows.h>
- #include <tchar.h>
- //#pragma comment(lib, "jvm.lib")
- #define PATH_SEPARATOR ';' /* define it to be ':' on Solaris */
- #define USER_CLASSPATH "." /* where Prog.class is */
- void testEnv()
- {
- CHAR dir[1024], path[1024];
- GetCurrentDirectoryA(MAX_PATH, dir);
- sprintf(path, "set PATH=%s\\jre\\bin\\client;.;", dir);
- system(path);
- printf("%s\n", path);
- sprintf(path, "set PATH=%s\\jre\\bin\\server;.;", dir);
- system(path);
- printf("%s\n", path);
- }
- //window JNI_CreateJavaVM启动java程序
- int main(int argc, char* argv[])
- {
- JNIEnv *env;
- JavaVM *jvm;
- jint res;
- jclass cls;
- jmethodID mid;
- jstring jstr;
- jclass stringClass;
- jobjectArray args;
- //testEnv();
- CHAR dir[1024], path[1024];
- GetCurrentDirectoryA(MAX_PATH, dir);
- //注意exe的位数64bit/32bit要和jdk的相匹配
- HMODULE handle = NULL;
- if (argc > 1)
- {
- sprintf(path, "%s", argv[1]);
- printf("%s\n", path);
- handle=LoadLibraryA(path);
- }
- if (handle == NULL)
- {
- sprintf(path, "%s\\jre\\bin\\client\\jvm.dll", dir);
- printf("%s\n", path);
- handle = LoadLibraryA(path);
- }
- if (handle == NULL)
- {
- sprintf(path, "%s\\jre\\bin\\server\\jvm.dll", dir);
- printf("%s\n", path);
- handle = LoadLibraryA(path);
- }
- if (handle == NULL)
- {
- handle = LoadLibraryA("jvm.dll");
- }
- if (handle == NULL)
- {
- printf("handle==NULL\n");
- return -1;
- }
- typedef jint(*JNI_CreateJavaVMT)(JavaVM **pvm, void **penv, void *args);
- JNI_CreateJavaVMT pJNI_CreateJavaVM = (JNI_CreateJavaVMT)GetProcAddress(handle, "JNI_CreateJavaVM");
- if (pJNI_CreateJavaVM == NULL)
- {
- printf("pJNI_CreateJavaVM == NULL\n");
- }
- else
- {
- printf("pJNI_CreateJavaVM != NULL\n");
- }
- //初始化jvm参数 http://blog.csdn.net/louka/article/details/7101562
- JavaVMInitArgs vm_args;
- JavaVMOption options[2];
- //搜索的类路径。把java类和jar包放在当前目录下
- #if _WIN32
- options[0].optionString = "-Djava.class.path=.;test.jar"; //这里指定了要使用的第三方Jar包
- #else
- options[0].optionString = "-Djava.class.path=.:test.jar"; //这里指定了要使用的第三方Jar包
- #endif
- options[1].optionString = "-verbose:NONE"; //用于跟踪运行时的信息
- vm_args.version = 0x00010002;
- vm_args.options = options;
- vm_args.nOptions = 1;
- vm_args.ignoreUnrecognized = JNI_TRUE;
- /* Create the Java VM */
- res = pJNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
- if (res < 0) {
- fprintf(stderr, "Can't create Java VM\n");
- exit(1);
- }
- cls = (*env)->FindClass(env, "Prog");
- if (cls == NULL) {
- goto destroy;
- }
- mid = (*env)->GetStaticMethodID(env, cls, "main", "([Ljava/lang/String;)V");
- if (mid == NULL) {
- goto destroy;
- }
- jstr = (*env)->NewStringUTF(env, " from C!");
- if (jstr == NULL) {
- goto destroy;
- }
- stringClass = (*env)->FindClass(env, "java/lang/String");
- args = (*env)->NewObjectArray(env, 1, stringClass, jstr);
- if (args == NULL) {
- goto destroy;
- }
- (*env)->CallStaticVoidMethod(env, cls, mid, args);
- (*env)->DeleteLocalRef(env, cls);
- (*env)->DeleteLocalRef(env, jstr);
- (*env)->DeleteLocalRef(env, stringClass);
- (*env)->DeleteLocalRef(env, args);
- destroy:
- if ((*env)->ExceptionOccurred(env)) {
- (*env)->ExceptionDescribe(env);
- }
- (*jvm)->DestroyJavaVM(jvm);
- FreeLibrary(handle);
- }
源码下载(右键另存为zip):
window JNI_CreateJavaVM启动java程序的更多相关文章
- Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序
Android For JNI(一)--JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序 当你的Android之旅一步步的深入的时候,你其实会发现,很多东西都必须去和framew ...
- Linux上设置开机启动Java程序
在Linux上设置开机启动Java程序,例如:test.jar 在Linux上启动Java程序的命令: nohup java -jar test.jar >/dev/>& & ...
- eclipse通过maven建立java se工程配置log4j,打包成zip,将jar包和配置文件分开,并以bat和sh文件启动java程序
一.新建maven的java工程 1.eclipse里file-new-other,选择maven Project 2.选中 Use default Workspace location,然后 nex ...
- 利用脚本启动java程序
今天在工作中,需要写一个shell脚本,启动一个socket程序,从而模拟短信网关.查了一些资料,终于搞定了,现在记录一下,方便大家查阅. 为了说明使用方法,我们就用最简单的程序来实现,比如我们要运行 ...
- ActiveMQ(下载,启动,java程序中 如何操作)
为了快速上手ActiveMQ 找个一个windows版本的mq来实现它的功能 1.http://activemq.apache.org/activemq-5158-release.html 下载 2. ...
- shell脚本启动java程序
#!/bin/bash ### 切换到工作目录 bin=$(cd `dirname ${0}`;pwd) cd ${bin} echo "bin [${bin}] .." ### ...
- java_linux_shell_定时kill 启动java程序
#!/bin/bash #while truedo Process_ID=`ps -ef |grep 'LoginSinaWeiboCookie.jar' |grep -v grep |awk '{p ...
- Shell 启动java程序
#!/bin/sh SHELL_PATH=$(cd ")";pwd) echo $SHELL_PATH cd "$SHELL_PATH" CLASSPATH=. ...
- Window 无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll。尝试重新安装该程序以解决此问题。
现象: 解决办法: 方法一:缺什么补什么 http://www.greenxf.com/soft/125654.html 把api-ms-win-crt-runtime-l1-1-0.dll下载到电脑 ...
随机推荐
- Angular1和Aangular4剖析
字面解析: 1.Angular1又名angularJs,从angular2,angular4都不带JS 2.变化:angular2跳转到angular4 架构: 1.angular1是基于MVC 2. ...
- 如何在Android的ListView中构建CheckBox和RadioButton列表(支持单选和多选的投票项目示例)
引言 我们在android的APP开发中有时候会碰到提供一个选项列表供用户选择的需求,如在投票类型的项目中,我们提供一些主题给用户选择,每个主题有若干选项,用户对这些主题的选项进行选择,然后提交. 本 ...
- js模拟链表
链表: 每个元素,都有一个指针,指向下一个元素 //链表 function LinkedList(){ var head = null; length = 0; this.append = funct ...
- log4j.properties配置详解与实例-全部测试通过[转]
最近使用log4j写log时候发现网上的写的都是千篇一律,写的好的嘛不全,写的全一点的嘛没有一点格式,看着累.这里把网上收集到的整理了一下,并且全部都在机器上测试成功了.这么好的文档估计没有了吧? # ...
- 修改CentOS的IP地址
一.临时修改 命令:ifconfig eth0 192.168.1.147 重启或者关机后,iP地址将会恢复到修改之前的状态. 二.永久修改 命令: vi /etc/sysconfig/network ...
- Mac使用数据线连接ios,安装deb
原创http://www.cnblogs.com/fply/p/8478702.html mac连接ios mac连接ios需要用到usbmuxd,这个可自行下载 到python-client目录下, ...
- cocos2d-x JS 获取屏幕大小或中点
以一张背景图为例: var HelloWorldLayer = cc.Layer.extend({ ctor:function () { this._super(); var bg = new cc. ...
- cocos2d-x JS 纯代码加载播放plist与png动画
var cache = cc.spriteFrameCache; cache.addSpriteFrames(plist, png); var frames = []; for (var i = 1; ...
- 使用pycharm调试django项目
要使用pycharm调试django 打断点调试后台代码,首先要进行一下配置: 1.debug 配置 打开debug界面 2.选择python点+加号,然后选择python 3.名字debug,这个看 ...
- Thinkphp 3.2 验证码图片显示错误解决方法
在调用验证码之前加上 ob_clean(); 不显示验证码的代码: public function verify(){ $verify = new \Think\Verify(); $verify-& ...