在JNI中创建一个Java虚拟机实例

来源:互联网 发布:文案好的淘宝店 编辑:程序博客网 时间:2024/05/22 14:32

Java语言分为编译和运行两个阶段。
这里写图片描述

第一个阶段是使用javac命令完成的,第二阶段是使用java命令完成的。

下面的目标就是写一个java程序,然后手动创建一个Java虚拟机实例来执行该java程序。

创建一个Demo.java文件

public class Demo {   public static void greet(String name) {      System.out.print("Hi! "+name);   }}

对上面程序进行编译,得到一个Demo.class文件

javac Demo.java 

下面写一个C++程序jvmdemo.cpp来启动一个虚拟机并且执行上面的字节码程序。

#include <jni.h>#include <iostream>#include <string>using namespace std;int main(int argc, char **argv) {   // 1、生成Java虚拟机参数   JavaVMOption jvmopt[1];   jvmopt[0].optionString = "-Djava.class.path=.";   JavaVMInitArgs vmArgs;   vmArgs.version = JNI_VERSION_1_2;   vmArgs.nOptions = 1;   vmArgs.options = jvmopt;   vmArgs.ignoreUnrecognized = JNI_TRUE;   // 2、生成虚拟机   JavaVM *javaVM;   JNIEnv *env;   long flag = JNI_CreateJavaVM(&javaVM, (void**)&env, &vmArgs);   if (flag == JNI_ERR) {      cout << "Error creating VM. Exiting...\n";      return 1;   }    // 3、查找并加载类   jclass jcls = env->FindClass("Demo");   if (jcls == NULL) {      env->ExceptionDescribe();      javaVM->DestroyJavaVM();      return 1;   }   // 4、greet()方法的ID   if (jcls != NULL) {      jmethodID methodId = env->GetStaticMethodID(jcls,         "greet", "(Ljava/lang/String;)V");      if (methodId != NULL) {         jstring str = env->NewStringUTF("Hello");         // 6、greet()方法         env->CallStaticVoidMethod(jcls, methodId, str);         if (env->ExceptionCheck()) {            env->ExceptionDescribe();            env->ExceptionClear();         }      }   }    // 7、销毁Java虚拟机   javaVM->DestroyJavaVM();   return 0;}

编译C++文件

Linux平台下:

g++ -IC:/java/include -IC:/java/include/win32   -o jvmdemo jvmdemo.cpp C:/java/lib/jvm.lib

运行:

./jvmdemo

如果出现下面错误,可以参考下面的解决方案

error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory

http://blog.csdn.net/zhangmingbao2016/article/details/52786056

参考文章:

https://www.developer.com/java/data/how-to-create-a-jvm-instance-in-jni.html
http://blog.csdn.net/dr8737010/article/details/8504093

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 蚕吐丝怎么办 蚕变成蚕蛾怎么办 羊肚子里有羊仔怎么办 脸上皮肤凹凸不平怎么办 吃完柿子肚子疼怎么办 人体微循环不好怎么办 养蚕时结茧怎么办 鞋柜深度不够怎么办 鞋柜不够大怎么办 厨房锅应该怎么办 家里有个大蛾子怎么办 榆树叶子发黄怎么办 玉树叶黄怎么办 蚕吐丝结茧后怎么办 蚕虫不吐丝怎么办 蚕养大了怎么办 蚕宝宝生病了怎么办 蚕吐丝之后怎么办 吃蚕过敏怎么办 蚕蛾产完卵后怎么办 凤仙花不开花怎么办 欠债太多怎么办 学佛人欠债太多怎么办 碰到茸毒蛾怎么办 螳螂死了怎么办 水草溶叶怎么办 血心兰气根怎么办 花椒树生虫怎么办 身体麻木怎么办 手腕摔伤肿痛怎么办 小孩脊柱弯曲怎么办 松毛虫毒到了怎么办 月经不调该怎么办 48岁月经不来怎么办 月子总是出汗怎么办 坐月子期间腰痛怎么办 更年期长胖怎么办 更年期总烧心怎么办 兔子咬脚垫怎么办 坐月子吹到风了怎么办 产妇奶水不足怎么办