GetMethodID를 사용하여 메서드를 찾으려고 시도하는 동안 JNI 코드에이 오류가 발생했습니다. Java 메서드가 인터페이스에 있습니다. 여기 JNI 메서드를 찾을 수 없습니다.
내 인터페이스public interface printReader
{
public printImg readerPrint(String selectedName) throws Exception;
}
네이티브 코드
WprintImgIMPL.h
class WprintImgIMPL: public IWprintReader {
public:
WprintImgIMPL(JNIEnv *env, jobject obj);
~WprintImgIMPL(void);
virtual WprintImg readerPrint(char* readerName) ;
.....
.....
private:
JNIEnv *m_Env;
jobject m_jObj;
}
WprintImgIMPL.cpp
WprintImg WprintImgIMPL::readerPrint(char* readerName) {
jclass cls = m_Env->GetObjectClass (m_jObj);
jmethodID mid = m_Env->GetMethodID (cls, "readerPrint", "(Ljava/lang/String;)Lcom/site/name/printImg;");
.......
.......
}
자바 코드
public class printReaderIMPL implements printReader {
static final String DEBUG_TAG = "";
android.net.wifi.WifiManager.MulticastLock lock;
Context _context;
public printReaderIMPL (Context context) {
_context = context;
}
@Override
public printImg readerPrint(String selectedName) throws Exception {
Log.e(DEBUG_TAG, "readerPrint");
}
}
생성자/소멸자
WprintImgIMPL(JNIEnv *env, jobject obj){
m_Env = env;
m_jobj = env->NewGlobalRef(obj);
}
~WprintImgIMPL(void) {
m_Env->DeleteGlobalRef(m_jobj);
}
Error: GetMethodID: method not found: Lcom/site/name/NativeCode;.printImg:(Ljava/lang/String;)Lcom/site/name/printImg;
입니다
서명을 두 번 확인했습니다. 실패 후 Javap 도구를 사용하여 다시 생성했습니다.
이 버그를 수정/입력하고 도움을 주셔서 감사합니다.
.h 파일의 선언은 어떻게됩니까? 그리고 .c 파일? 그들은 동의합니까? – EJP
다시 질문하십시오. 원시 코드도 추가했습니다. –
그리고 예 그들은 코드 컴파일/링크를 잘 동의하지만 GetMethodID에서 충돌 한 메서드를 찾을 수 없습니다. –