2014-05-15 3 views
0

Java 호출 메소드가 필요합니다.NDK의 java 코드가 작동하지 않습니다.

Projekt.cpp: 
jclass cls = env->GetObjectClass(obj); 
jmethodID mid = env->GetMethodID(cls, "Vypocet", "(III)I"); 
int vysledek = env->CallIntMethod(cls, mid, nahodne_cislo, d, n); 


Main.java 
public Integer Vypocet(int a, int b, int c) 
    { 
...........other code...... 
........................... 
     return vysl; 
    } 

지금 무엇을 해야할지 모르겠다. :(

오류 쓰기 로그 캣 :. Fatal signal 11 (SIGSEGV) at 0xdeadd00d

답변

1

을 자바 코드에서, 당신은 반환 형식 Integer (전체 이름 java.lang.Integer에있는 클래스, 인)와 방법을 선언

.

그러나 다음 C 당신이 서명 (III)I있는 방법을 찾아 ++ 코드, 세 int 매개 변수를 의미하고 int 값을 반환. 그리고 이후에 당신은 또한 int 반환 유형을 반환하는 방법을 기대하는 CallIntMethod를 사용한다.

당신은 당신의 자바 코드를 변경하여 문제를 해결할 수 있습니다 :

public int Vypocet(int a, int b, int c) { 
    // your code 
    return vysl; 
} 

또 다른 해결책은이 같은 때문에, Integer 반환 유형을 반영하기 위해 C++ 코드를 변경하는 것입니다 :

// call your java method 
jclass cls = env->GetObjectClass(obj); 
jmethodID mid = env->GetMethodID(cls, "Vypocet", "(III)Ljava/lang/Integer;"); 
jobject intObj = env->CallIntMethod(cls, mid, nahodne_cislo, d, n); 

// call the Integer.getValue() to get a native int value 
jclass integercls = env->GetObjectClass(intObj); 
jmethodID getVal = env->GetMethodID(cls, "intValue", "()I"); 
int value = jenv->CallIntMethod(integervalue, getVal); 
+0

첫 번째 제안에 대해 "public * int * Vypocet"을 의미 했습니까? – fadden

+0

내 잘못 코드의 올바른 줄을 복사하지 않았다 – XGouchet

관련 문제