public class TestOk {
public static void main(String[] args)
  {
TestOk atet=new TestOk();
atet.GetCE("这是一个测试。");
    String str;     JMTSDK jmt = new JMTSDK();     jmt.InitMTEngin("C:\\Documents and Settings\\windcircle\\workspace\\clir\\dll\\", "C:\\Documents and Settings\\windcircle\\workspace\\clir\\data\\");     str = "这是一个测试。";     System.out.println("Source is: " + str);     str = jmt.TranSent(str);     System.out.println("Translation is: " + str);     //jmt.DoneMTEngin();
  }
}
这样使用默认包调用就可以
package mypackage;
public class Test {
public static void main(String[] args)
  {
String str;     JMTSDK jmt = new JMTSDK();
        
    jmt.InitMTEngin("C:\\Documents and Settings\\windcircle\\workspace\\clir\\dll\\", "C:\\Documents and Settings\\windcircle\\workspace\\clir\\data\\");     str = "这是一个测试。";     System.out.println("Source is: " + str);     str = jmt.TranSent(str);     System.out.println("Translation is: " + str);     //jmt.DoneMTEngin();
  }
}
这样放在一个包里调用就提示
Exception in thread "main" java.lang.UnsatisfiedLinkError: InitMTEngin
at mypackage.JMTSDK.InitMTEngin(Native Method)
at mypackage.Test.main(Test.java:14)

解决方案 »

  1.   

    默认包调用就可以
    public class Test {
    public static void main(String[] args)
      {
               JMTSDK jmt = new JMTSDK();
         str = jmt.InitMTEngin("dll/",("data/"));
      }
    }
    public class JMTSDK {
      native public void InitMTEngin(String dllpath, String datapath);
       static {
        System.loadLibrary("JMTSDK");
      }
    }有名包调用就不行
    package mypackage;
    public class Test {
    public static void main(String[] args)
      {
               JMTSDK jmt = new JMTSDK();
        str = jmt.InitMTEngin("dll/",("data/"));
      }
    }
    package mypackage;
    public class JMTSDK {
      native public void InitMTEngin(String dllpath, String datapath);
      static {
        System.loadLibrary("JMTSDK");
      }
    }
      

  2.   

    你需要在包的上一层javah  包.****生成头文件
      

  3.   

    例如在mypackage里面class JMTSDK 的native method InitMTEngin.
    也就是 mypackage.JMTSDK.InitMTEngin
    在JNI里面的定义就是 mypackage_JMTSDK_InitMTEngin(...)LZ的问题就是DLL中定义的是JMTSDK_InitMTEngin(...)所以在默认包可以调用,在namespace mypackage下不行.
    解决方案
    修改JMTSDK.dll的文件 把 JMTSDK_InitMTEngin 改成 mypackage_JMTSDK_InitMTEngin