人要死了,jni调用问题

594king 2005-12-18 12:13:39
各位,我用java通过jni调用vc的动态库,直接调用是可以的,就是用《java编程思想》附录a的那个例子,但是当把java文件放在某个包里(在文件头最前面加package)就调用不了,提示unsatisfiedlinkerror,请问是怎么回事啊???我已经设了-Djava.library.path属性了,还是那个样子,前天晚上好像是成功了一次,昨天试却怎么都不行,可能前天出现幻觉了,各位兄弟快帮帮我吧,不胜感谢!!!!!
...全文
220 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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(....)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧