2011-02-03 16 views
0

JNIを使​​用してJavaとCの間でストリームを共有する際に問題があります。私はCからJavaメソッドを呼び出そうとしていますが、GetObjectMethodIDを取得しようとしているときにnosuchmethodfoundの例外が発生しています。例外NOSUCHMETHODERRORがCからJNIを介してCからJavaメソッドを呼び出すとき

Cコード:

jclass cls = (*env)->GetObjectClass(env, obj); 
jmethodID aMethodID = (*env)->GetMethodID(env, cls, "callbackmethod", "(I)V"); 
if (aMethodID == 0) { 
    log("Unable to get methodID"); //Always getting aMethodID as 0 
} 
int myvar = 7; 
(*env)->CallVoidMethod(env, obj, aMethodID, myvar); 

Javaコード:

public class myclass extends activity { 
    private void callbackmethod(int i) { 
     Log.d("Tag", "In Java code"); 
    } 

    ------- 
    more code 
} 

は今、私は常にエラーLjava/lang/NoSuchMethodError;: callbackmethodを取得しています。

すべてうまく見えますが、コードが機能しません。何が問題ですか?

+0

ヘッダファイルを含める必要がありますか?それは私が今考えることができるものです –

+0

あなたのC、Javaソースを実際のスニペットを反映するように更新すると、解像度がより速くなります。 callabckmethod()のシグネチャを正しく生成しましたか? – TheCottonSilk

+0

そうかもしれません。署名をどのように生成すればよいですか? –

答えて

2

私の間違いでした。私はJavaの静的関数からネイティブ関数を呼び出していました。私は静的キーワードを削除しました。今はうまくいきます。

+1

なぜダウン票?彼らは間違いを犯し、誰もが間違いを犯す可能性があります。 – gheese

+0

ありがとう、私は同様の問題を抱えており、これは私に正しい修正を指摘した – Oren

5

JNIメソッドは静的ですか?その場合、その2番目のパラメータは、現在のオブジェクトのポインタではなく、クラスです。

また、現在のクラスまたはそのベースで問題のメソッドですか?あなたがactivityをすべて小文字で綴っていると判断して、これはあなたの実際のコードのコピー/ペーストではなく、書き直しです。実際のコードでエラーを見つける方が簡単です。

関連する問題