2010-03-18 3 views
0

J'essaie d'utiliser (*env)->RegisterNatives pour ajouter des méthodes à une classe définie que j'ajoute ensuite à une liste de rappel. L'expéditeur de rappel s'attend bien sûr à ce que ma classe implémente une certaine interface, ce que je ne fais pas. Et échoue à l'exécution. Si j'ajoute le mot-clé "implements Listener" à ma classe en Java, javac s'attend à avoir la définition des méthodes en Java ou avec un mot-clé natif que j'essaie d'éviter ici, car je souhaite enregistrer les méthodes dans le JNI_OnLoad et exécute l'un d'entre eux par la suite.Utilisation des interfaces dans JNI

La question est maintenant: Puis-je implémenter l'interface dans JNI ou éviter le message d'erreur en Java?

Répondre

2

RegisterNatives n'ajoute pas de nouvelles méthodes natives, il enregistre la fonction native pour la méthode native existante dans la classe. Si quelqu'un n'appelle pas RegisterNatives pour une méthode native, le JVM recherchera toutes les bibliothèques DLL pour son implémentation lorsque la méthode est appelée pour la première fois.

Donc, ajoutez implements Listener, écrivez des définitions avec le mot clé native et enregistrez leur implémentation avec RegisterNatives.

+0

Merci. Si vous ne m'aviez pas signalé à mon malentendu avec les RegisterNatives, cela m'aurait pris au moins une semaine de plus. – lhw