人要死了,jni调用问题

594king 2005-12-18 12:13:39
各位,我用java通过jni调用vc的动态库,直接调用是可以的,就是用《java编程思想》附录a的那个例子,但是当把java文件放在某个包里(在文件头最前面加package)就调用不了,提示unsatisfiedlinkerror,请问是怎么回事啊???我已经设了-Djava.library.path属性了,还是那个样子,前天晚上好像是成功了一次,昨天试却怎么都不行,可能前天出现幻觉了,各位兄弟快帮帮我吧,不胜感谢!!!!!
...全文
181 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
594king 2005-12-19
呵呵
回复
lihanmm 2005-12-19
呵~~解决了。原因是dll文件没有放在当前目录下。谢谢你啊!*^_~*
回复
lihanmm 2005-12-19
我按照你说的,生成了头文件,也仔细检查了函数的参数,没有出现你说的那种jobject错成jclass的情况,但为什么还是调用不到呢?
错误如下:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no ebasetest in java.
library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at ebase.ebasetest.<clinit>(ebasetest.java:116)
at testuse.main(testuse.java:24)
看样子还是找不到dll文件阿……
请指点!万分感谢!
回复
594king 2005-12-19
你好,你要在包外用javah生成头文件,javah yourpackage.yourclass
这样就可以了,试试看。
回复
lihanmm 2005-12-19
你好,我也遇到了类似问题,但是我加了package之后再用javah生成的头文件还是原来的样子。
可不可以请你详细写一下过程呢?谢谢!*^_^*
回复
594king 2005-12-18
谢谢,我刚刚试成功了,原来我重新生成头文件时函数定义里有个类型是jobject,我的实现文件里写的是jclass类型,改革来就可以了,呵呵,真是感谢阿。
回复
594king 2005-12-18
我javah重新生成了一次头文件,函数名确实如你所说,但是还是调用不了,错误提示一样,请问怎么回事啊?
回复
kingfish 2005-12-18
如果加了package,jni中函数名要随之变化

如你的类是 a.b.Test,函数f()
那么JNI中应该是Java_a_b_Test_f(....)
回复
发动态
发帖子
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
社区公告
暂无公告