Проверьте наличие необязательного поля или метода в Java Class из кода JNI

У меня есть класс Java, который может быть разделен на подклассы, чтобы добавить дополнительное поле. Существует соответствующий метод C ++ JNI, который будет взаимодействовать с этим полем. Однако я хочу, чтобы код JNI обрабатывал как базовый класс, так и подкласс, что означает, что он должен определять, присутствует ли поле.

Мой (упрощенный) код JNI выглядит так:

fid = j.GetFieldID( jc, UTF8_SECPARM, SIG_SECPARM );
if ( fid == 0 ) return;
... continue with fid ...

Хотя метод GetFieldID () возвращает NULL, приложение получает исключение на некотором последующем этапе обработки, который, по-видимому, не связан с этим кодом. Тем не менее, это как-то связано, потому что, если я просто вернусь к методу GetFieldID (), не будет никаких исключений.

Как можно надежно проверить наличие поля или метода в объекте из кода JNI?

5

Решение

Оказывается, что хотя метод GetFieldID () возвращает NULL, существует также сгенерированное исключение Java, которое необходимо обработать.

Решение состоит в том, чтобы проверить исключение и очистить (или обработать) его. Самое простое решение это:

fid = j.GetFieldID( jc, UTF8_SECPARM, SIG_SECPARM );
if ( JNI_TRUE == j.ExceptionCheck() ) {
j.ExceptionClear();
return;
}
... continue with fid ...
8

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector