Подписи JNI для вложенных классов?

Я пытаюсь использовать JNI в WindowsXP, версия java:

версия java "1.6.0_13" Java(TM) SE Runtime Environment (сборка 1.6.0_13-b03) Java HotSpot(TM) Client VM (сборка 11.3-b02, смешанный режим, совместное использование)

При попытке получить jclass для вложенного класса

jclass c = env->FindClass("A$B"); утверждать (с);

вторая строка утверждает: То же самое работает в Linux с немного другой версией Java (1.5... IIRC).

Я пробовал несколько перестановок, например

LA$B; A.B LA.B;

но безрезультатно.

Любые советы будут высоко оценены.

Мартин


person Community    schedule 08.04.2009    source источник


Ответы (1)


Похоже, проблема была решена в этой теме.

Обновление: Oracle переместил форумы на новое место: Подпись для вложенного класса?

Вот как проблема была решена:

Хорошо, я наконец нашел проблему. Вложенный класс компилируется в отдельный объект класса Java (A$B.class) - немного неожиданно для программиста на C/C++. Я не упаковал файл, поэтому класс был отмечен как «не найден». Интересно, что это работало на Linux. Спасибо за вашу помощь!

Еще один совет от меня: в случае, если FindClass возвращает null, не просто assert и угадывайте. По крайней мере, вызовите env->ExceptionDescribe(), чтобы получить трассировку стека на stderr. Еще лучше использовать env->ExceptionOccurred() для проверки выбрасываемого исключения Java, точно так же, как и для любого другого метода Java, который вы вызываете.

person Ronald Blaschke    schedule 13.04.2009
comment
Ссылка уже мертва. (Большое спасибо Oracle!) Можете вкратце рассказать, что это было? - person Tim Sylvester; 11.05.2011