要するに、ネイティブメソッドは、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の例は、ネイティブメソッドが宣言されているのと同じクラスにライブラリをロードします。誰かがこの物に光を当てることができますか?
はどうなりますか? –