У меня есть этот класс в Java:Java JNI GetMethodID возвращение NULL
public class CameraActivity extends Activity {
...
public class RecognitionResult {
public String text;
public int x;
public int y;
public int width;
public int height;
public RecognitionResult(String text, int x, int y, int width, int height) {
this.text = text;
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
}
}
И это мой JNI код:
extern "C"
jobject Java_com_example_parkingcontrolsystem_CameraActivity_recognizeNumberPlate(JNIEnv *env,
jobject object,
jstring filename)
{
jclass cls = env->FindClass("com/example/parkingcontrolsystem/CameraActivity$RecognitionResult");
std::cout << "Class: " << cls << std::endl;
jmethodID constructor = env->GetMethodID(cls, "<init>", "(Ljava/lang/String;IIII)V");
std::cout << "Method: " << constructor << std::endl;
recognition_result = env->NewObject(cls, constructor, "Hello from JNI", 0, 0, 50, 100);
std::cout << "Object: " << recognition_result << std::endl;
return recognition_result;
}
FindClass возвращает не NULL в, OK. Но GetMethodID всегда возвращает ноль. Я попытался создать конструктор по умолчанию без args, а не использовать подпись «() V», но GetMethodID возвращает NULL.
Что не так?
http://stackoverflow.com/questions/70324/java-inner-class-and-static-nested-class '" (Lcom/example/parkingcontrolsystem/CameraActivity; Ljava/lang/String; IIII) V " – Selvin
Еще 2 цента: Следующая проблема заключается в том, что вы не можете вызвать этот конструктор без экземпляра CameraActivity (но я не уверен, что это возможно сделать в JNI) ... так что вам лучше сделать его статическим внутренний класс или вообще не внутренний – Selvin
Спасибо, мужик! Метод найден! Хорошо, я делаю этот класс статическим внутренним классом. – herolover