请教jni的初级问题

Areslp 2006-12-25 11:49:43
写了个java类:

public class A {
public native void say();
static {
System.loadLibrary("aaa");
}
}
在类B中调用:

public class B {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
System.out.println("java.library.path :"+System.getProperty("java.library.path"));
A a=new A();
a.say();
}

}
在c++中生成了aaa.dll后放到了和A.class,B.class同目录下,但是执行报:
java.library.path :C:\Program Files\Java\jre1.6.0\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\MinGW\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Java\jdk1.6.0\bin;C:\Program Files\Microsoft Visual Studio 8\VC\bin
Exception in thread "main" java.lang.UnsatisfiedLinkError: A.say()V
at A.say(Native Method)
at B.main(B.java:11)
请问这是什么问题,我感觉不像是没找到dll文件。。
...全文
214 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Areslp 2006-12-26
  • 打赏
  • 举报
回复
两个public class是因为写在两个不同文件里的,都在默认包下

没找到dll的时候报的错:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no abc 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 A.<clinit>(A.java:5)
at B.main(B.java:10)
另外
A a=new A();
a.say();
只注释掉第二句的时候是对的,System.loadLibrary("aaa");这句是在A a=new A();的时候就执行了的啊
lixiaoxue85 2006-12-26
  • 打赏
  • 举报
回复
1.着么两个PUBLIC 的CLASS?
2.Exception in thread "main" java.lang.UnsatisfiedLinkError
没有找到DLL文件
3.把A a=new A();
a.say();这两句去掉编译下就知道是DLL文件没放对地方了
Areslp 2006-12-26
  • 打赏
  • 举报
回复
改用vc编译dll后可以了,之前用mingw编译的,汗,不知道为何
Areslp 2006-12-26
  • 打赏
  • 举报
回复
up

62,614

社区成员

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

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