he_fa 发表于 2013-05-21 10:39

java jni 可以解决以下问题吗?

    由于项目需要,java主程序运行后要调C语言写的动态连接库,动态连接库(写成服务)要定时的向java主程序反馈一些信息,这个过程使用jni能完成吗?
    自己尝试着写了下,但总是报A fatal error has been detected by the Java Runtime Environment错误。错误的原因我感觉是c要向java反馈信息需要先初始化jvm,所以会使本来的jvm崩溃,是这样吗?
   假如将c写成可执行程序,确实可以向java反馈信息,但是动态链接库可以吗?
   除了jni还有什么方法可以解决这个问题???

ddd010 发表于 2013-05-28 17:17

先注册env,然后再回调。

不然不行的。

方兆国 发表于 2013-05-29 09:50

ddd010 发表于 2013-05-28 17:17 static/image/common/back.gif
先注册env,然后再回调。

不然不行的。

这么麻烦?不是根据Java Native编出的动态连接库可以直接用吗?

tong0245 发表于 2013-05-29 09:54

不懂啊                                       

ddd010 发表于 2013-05-29 11:12

方兆国 发表于 2013-05-29 09:50 static/image/common/back.gif
这么麻烦?不是根据Java Native编出的动态连接库可以直接用吗?


java可以直接调用native代码,但是native代码调用java就必须要JVM的env。

ddd010 发表于 2013-05-29 11:15

tong0245 发表于 2013-05-29 09:54 static/image/common/back.gif
不懂啊


这两年开发过不少Native程序所以知道些。之前也不知道。。

tong0245 发表于 2013-05-29 11:30

还是不懂啊

he_fa 发表于 2013-05-29 12:07

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会不会有问题???

he_fa 发表于 2013-05-29 12:37

方兆国 发表于 2013-05-29 09:50 static/image/common/back.gif
这么麻烦?不是根据Java Native编出的动态连接库可以直接用吗?
上面那位大哥指的是动态库反调java时需要env

方兆国 发表于 2013-05-29 12:48

ddd010 发表于 2013-05-29 11:12 static/image/common/back.gif
java可以直接调用native代码,但是native代码调用java就必须要JVM的env。

这样,还没有用过,意思就是Native的类不能用非Native的类呗
页: [1] 2 3
查看完整版本: java jni 可以解决以下问题吗?