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)
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)
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");
}
}
也就是 mypackage.JMTSDK.InitMTEngin
在JNI里面的定义就是 mypackage_JMTSDK_InitMTEngin(...)LZ的问题就是DLL中定义的是JMTSDK_InitMTEngin(...)所以在默认包可以调用,在namespace mypackage下不行.
解决方案
修改JMTSDK.dll的文件 把 JMTSDK_InitMTEngin 改成 mypackage_JMTSDK_InitMTEngin