Пользовательские исключения JNI с более чем одним параметром - PullRequest
1 голос
/ 06 марта 2019

Я довольно новичок в совершенстве JNI, поэтому, пожалуйста, просто скажите мне, если я глупый.

Я пытаюсь выбросить пользовательское исключение из C ++ в слой Java, который создается с использованием как строки, так ицелое число.Я не могу заставить ThrowNew () работать, потому что он принимает только один строковый параметр.КАЖДЫЙ пример пользовательского исключения, которое я мог найти, использует ThrowNew () !!Grrrrr

Я предполагаю, что мне нужно будет скомпоновать один с и бросить его с "Throw (jthrowable obj)", но я не уверен .. это то же самое, что и "ThrowNew ()" ??

Например, это то, что мне нужно:

int myErrorCode = 42;
const char* myErrorString = "stuff broke";

jclass myExceptionClass = env->FindClass("MyException");
env->ThrowNew(myExceptionClass, myErrorString, myErrorCode );//<-- of course this wont work!

Этот код работает нормально, если мой класс исключений выглядит как Exception () и принимает только строку.

Кто-нибудь знаетКак создать и выбросить новый экземпляр исключения в Java, который принимает параметры, отличные от строки по умолчанию Exception ()?Бросать только веревку для меня ничего не стоит.

Заранее спасибо!

1 Ответ

3 голосов
/ 06 марта 2019

Вы можете использовать env->Throw, чтобы создать экземпляр, который вы создаете вручную:

jclass myExceptionClass = env->FindClass("MyException");
jstring myErrorJString = env->NewStringUTF(myErrorString);
jmethodID ctorMethod = env->GetMethodID(myExceptionClass, "<init>", "(Ljava/lang/String;I)V");
jobject myExceptionObject = env->NewObject(myExceptionClass, ctorMethod, myErrorJString, myErrorCode);
env->Throw(myExceptionObject);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...