C++ 代码创建虚拟机调用java方法
来源:互联网 发布:北京 补牙 知乎 编辑:程序博客网 时间:2024/06/04 18:41
Java 和 C/C++代码的互相调用一般都是采用JNI的方法,首先Java 类 J 通过native函数调用在 对应的C++文件C中的方法,C文件保存相应的虚拟机和JNIEnv等变量,获取java类中的方法或者属性的ID,进而回调J中的方法。但有时候需要直接从C++的方法中调用java的方法,这就需要在C++代码中创建虚拟机,从而直接调用java中的代码。
代码如下:(main.cpp)
#include <jni.h>#include <stdio.h>int main(int argc, char** argv){ JavaVM* vm; JNIEnv* env; JavaVMInitArgs vm_args; vm_args.version = JNI_VERSION_1_4; vm_args.nOptions = 0; vm_args.ignoreUnrecognized = 1; // Construct a VM jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args); // Construct a String jstring jstr = env->NewStringUTF("Hello World"); // First get the class that contains the method you need to call jclass clazz = env->FindClass("java/lang/String"); // Get the method that you want to call jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase", "()Ljava/lang/String;"); // Call the method on the object jobject result = env->CallObjectMethod(jstr, to_lower); // Get a C-style string const char* str = env->GetStringUTFChars((jstring) result, NULL); printf("%s\n", str); // Clean up env->ReleaseStringUTFChars(jstr, str); // Shutdown the VM. vm->DestroyJavaVM();}
编译如下:
$ export LD_LIBRARY_PATH=/....../jdk1.6.0_26/jre/lib/i386/server/ #路径指向包含 libjvm.so 文件的目录
$ g++ -I/....../jdk1.6.0_26/include/ -I/....../jdk1.6.0_26/include/linux/ -L/....../jdk1.6.0_26/jre/lib/i386/server/ -ljvm main.cpp
$./a.out
即可看到程序的输出的结果
运行环境:uBuntu 10.04
- C++ 代码创建虚拟机调用java方法
- C调用java代码
- C调用java代码
- java 调用C代码
- c代码调用java代码
- C/C++调用Java代码(属性和方法)
- C/C++调用Java代码(属性和方法)
- (JNI)c代码利用反射调用java方法
- C/C++调用Java代码(属性和方法)
- (JNI)c代码利用反射调用java方法
- c调用java方法
- 在C++代码中创建Java虚拟机。
- 在C++代码中创建Java虚拟机。
- 深入理解Java虚拟机笔记---方法调用
- 深入理解Java虚拟机笔记---方法调用
- 深入理解Java虚拟机笔记---方法调用
- java一个方法调用的虚拟机实现
- 初识Java虚拟机(9)方法调用
- POJ 3691 and Hduoj 2457 DNA repair
- 数据结构之顺序栈的操作(C语言)
- 进程、线程、任务的区别是什么
- QSqlDatabase类
- opencv深入学习(2)--Scalar类型
- C++ 代码创建虚拟机调用java方法
- poj 1463 Strategic game 树型dp,最小点集覆盖
- MFC里面的响应对话框里的Edit控件的几种方法
- 优秀程序员的十个习惯
- 模拟QQ聊天窗口
- Web.config详解
- CentOS6.2+Apache+Mysql安装Redmine
- java中的工厂模式
- IOS学习笔记28—SQLite3第三方库之FMDB