免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4625 | 回复: 25
打印 上一主题 下一主题

java jni 可以解决以下问题吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-21 10:39 |只看该作者 |倒序浏览
    由于项目需要,java主程序运行后要调C语言写的动态连接库,动态连接库(写成服务)要定时的向java主程序反馈一些信息,这个过程使用jni能完成吗?
    自己尝试着写了下,但总是报A fatal error has been detected by the Java Runtime Environment错误。错误的原因我感觉是c要向java反馈信息需要先初始化jvm,所以会使本来的jvm崩溃,是这样吗?
   假如将c写成可执行程序,确实可以向java反馈信息,但是动态链接库可以吗?
   除了jni还有什么方法可以解决这个问题???

论坛徽章:
31
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43CU十二周年纪念徽章
日期:2013-10-24 15:41:34丑牛
日期:2013-12-01 10:11:07水瓶座
日期:2014-01-15 08:47:25
2 [报告]
发表于 2013-05-28 17:17 |只看该作者
先注册env,然后再回调。

不然不行的。

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
3 [报告]
发表于 2013-05-29 09:50 |只看该作者
ddd010 发表于 2013-05-28 17:17
先注册env,然后再回调。

不然不行的。


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

论坛徽章:
0
4 [报告]
发表于 2013-05-29 09:54 |只看该作者
不懂啊                                         

论坛徽章:
31
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43CU十二周年纪念徽章
日期:2013-10-24 15:41:34丑牛
日期:2013-12-01 10:11:07水瓶座
日期:2014-01-15 08:47:25
5 [报告]
发表于 2013-05-29 11:12 |只看该作者
方兆国 发表于 2013-05-29 09:50
这么麻烦?不是根据Java Native编出的动态连接库可以直接用吗?



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

论坛徽章:
31
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43CU十二周年纪念徽章
日期:2013-10-24 15:41:34丑牛
日期:2013-12-01 10:11:07水瓶座
日期:2014-01-15 08:47:25
6 [报告]
发表于 2013-05-29 11:15 |只看该作者
tong0245 发表于 2013-05-29 09:54
不懂啊



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

论坛徽章:
0
7 [报告]
发表于 2013-05-29 11:30 |只看该作者
还是不懂啊

论坛徽章:
0
8 [报告]
发表于 2013-05-29 12:07 |只看该作者
ddd010 发表于 2013-05-28 17:17
先注册env,然后再回调。

不然不行的。

我是这样初始化env的
JNIEnv* create_vm() {  
    JavaVM* jvm;  
    JNIEnv* env;  
    JavaVMInitArgs args;  
    JavaVMOption options[1];  
    args.version = JNI_VERSION_1_6;  
    args.nOptions = 0;  
    options[0].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会不会有问题???

论坛徽章:
0
9 [报告]
发表于 2013-05-29 12:37 |只看该作者
方兆国 发表于 2013-05-29 09:50
这么麻烦?不是根据Java Native编出的动态连接库可以直接用吗?

上面那位大哥指的是动态库反调java时需要env

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
10 [报告]
发表于 2013-05-29 12:48 |只看该作者
ddd010 发表于 2013-05-29 11:12
java可以直接调用native代码,但是native代码调用java就必须要JVM的env。


这样,还没有用过,意思就是Native的类不能用非Native的类呗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP