java jni 可以解决以下问题吗?
由于项目需要,java主程序运行后要调C语言写的动态连接库,动态连接库(写成服务)要定时的向java主程序反馈一些信息,这个过程使用jni能完成吗?自己尝试着写了下,但总是报A fatal error has been detected by the Java Runtime Environment错误。错误的原因我感觉是c要向java反馈信息需要先初始化jvm,所以会使本来的jvm崩溃,是这样吗?
假如将c写成可执行程序,确实可以向java反馈信息,但是动态链接库可以吗?
除了jni还有什么方法可以解决这个问题??? 先注册env,然后再回调。
不然不行的。 ddd010 发表于 2013-05-28 17:17 static/image/common/back.gif
先注册env,然后再回调。
不然不行的。
这么麻烦?不是根据Java Native编出的动态连接库可以直接用吗? 不懂啊 方兆国 发表于 2013-05-29 09:50 static/image/common/back.gif
这么麻烦?不是根据Java Native编出的动态连接库可以直接用吗?
java可以直接调用native代码,但是native代码调用java就必须要JVM的env。 tong0245 发表于 2013-05-29 09:54 static/image/common/back.gif
不懂啊
这两年开发过不少Native程序所以知道些。之前也不知道。。 还是不懂啊 ddd010 发表于 2013-05-28 17:17 static/image/common/back.gif
先注册env,然后再回调。
不然不行的。
我是这样初始化env的
JNIEnv* create_vm() {
JavaVM* jvm;
JNIEnv* env;
JavaVMInitArgs args;
JavaVMOption options;
args.version = JNI_VERSION_1_6;
args.nOptions = 0;
options.optionString = "-Djava.class.path=../java";
// args.options = options;
args.ignoreUnrecognized = JNI_TRUE;
JNI_CreateJavaVM(&jvm, (void **)&env, &args);
return env;
}
但是运行后总是报这样的错误:A fatal error has been detected by the Java Runtime Environment
原始是不是将原来的jvm替换了?我也是刚接触jni
c的可执行程序调java是没问题的,但java调c再调java会不会有问题??? 方兆国 发表于 2013-05-29 09:50 static/image/common/back.gif
这么麻烦?不是根据Java Native编出的动态连接库可以直接用吗?
上面那位大哥指的是动态库反调java时需要env ddd010 发表于 2013-05-29 11:12 static/image/common/back.gif
java可以直接调用native代码,但是native代码调用java就必须要JVM的env。
这样,还没有用过,意思就是Native的类不能用非Native的类呗