En résumé: Une méthode native doit évidemment être déclarée dans la même classe que l'appel loadLibrary. Si la méthode native est déclarée dans une classe interne statique, la liaison échoue.java loadlibrary et déclaration de méthode native
Exemple de travail:
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
}
}
}
exemple défaut:
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: Le loadLibrary fonctionne dans les deux exemples.
Je n'ai trouvé aucun indice à ce sujet. Tous les exemples JNI que j'ai trouvés charger la bibliothèque dans la même classe que la méthode native est déclarée. Quelqu'un peut-il faire la lumière sur ce genre de choses?
Qu'advient-il si vous ne chargez pas la bibliothèque dans votre classe TestNative2 dans le constructeur, mais plutôt de le charger dans un bloc statique? –