写了个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文件。。

解决方案 »

  1.   

    1.着么两个PUBLIC 的CLASS?
    2.Exception in thread "main" java.lang.UnsatisfiedLinkError
      没有找到DLL文件
    3.把A a=new A();
    a.say();这两句去掉编译下就知道是DLL文件没放对地方了
      

  2.   

    两个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();的时候就执行了的啊
      

  3.   

    改用vc编译dll后可以了,之前用mingw编译的,汗,不知道为何