簡而言之:顯然,本地方法必須在發出loadLibrary調用的同一類中聲明。如果本地方法在靜態內部類中聲明,則綁定失敗。java loadlibrary和本地方法聲明
工作例如:
public class TestNative
{
public TestNative()
{
System.loadLibrary("mylibrary");
}
private native int nativeMethod();
public void doit()
{
new NativeWrap().callNative();
}
class NativeWrap
{
int callNative()
{
return nativeMethod(); // <<<< works
}
}
}
失敗例子:
public class TestNative2
{
public TestNative2()
{
System.loadLibrary("mylibrary");
}
public void doit()
{
new NativeWrap().callNative();
}
static class NativeWrap
{
int callNative()
{
return nativeMethod(); // <<<< throws UnsatisfiedLinkError
}
private native int nativeMethod();
}
}
BTW:該作品調用LoadLibrary在這兩個例子。
我沒有發現任何有關此主題的提示。我發現的所有JNI示例都會在聲明本地方法的同一類中加載庫。有人能對這個東西發光嗎?
如果你沒有在你的構造函數類TestNative2加載庫,而是在靜態塊加載它,會發生什麼? –