2009-04-08 6 views
3

Je suis en train d'utiliser JNI sur Windows XP, la version java:signatures JNI pour les classes imbriquées?

java version "1.6.0_13" Java (TM) SE Runtime Environment (build 1.6.0_13-b03) Java HotSpot (TM) VM Client (build 11.3-b02, mode mixte, partage)

Lorsque vous essayez d'obtenir JClass pour une classe imbriquée

JClass c = env-> FindClass ("a $ B"); affirmer (c);

la deuxième ligne affirme, La même chose fonctionne bien sur Linux avec une version légèrement différente de Java (1.5 ... IIRC).

J'ai essayé plusieurs permutations comme

LA $ B; A.B LA.B;

mais en vain.

Tout conseil sera très apprécié.

Martin

Répondre

1

On dirait que le problème a été résolu dans this thread.

Mise à jour: Oracle a déplacé les forums, le nouvel emplacement est Signature for nested class?

Voilà comment le problème a été résolu:

Ok, je l'ai enfin trouvé le problème. La classe imbriquée est compilée dans un objet de classe Java distinct (A $ B.class) - un peu inattendu pour le programmeur C/C++. Je n'ai pas arrangé le dossier, donc la classe a été déclarée comme «non trouvée». Intéressant, cela a fonctionné sur Linux cependant. Merci de votre aide!

Un autre indice de moi: En cas FindClass Les rendements ne null pas seulement assert et devinez. À tout le moins, appelez env->ExceptionDescribe() pour obtenir une pile sur stderr. Mieux encore, utilisez env->ExceptionOccurred() pour vérifier que l'exception Java est levée, comme vous le feriez pour toute autre méthode Java que vous appelez.

+1

Le lien est maintenant mort. (Merci beaucoup Oracle!) Pouvez-vous résumer ce que c'était? –

Questions connexes