JNI подписи для вложенных классов? - PullRequest
3 голосов
/ 08 апреля 2009

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

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

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

jclass c = env-> FindClass ("A $ B"); заявить (с);

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

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

LA $ B; A.B LA.B;

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

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

Мартин

1 Ответ

1 голос
/ 13 апреля 2009

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

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

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

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

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

...