Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(【JNI】呼び出し元クラスメソッドを実行したい)
閲覧数:1424
掲示板(【JNI】呼び出し元クラスメソッドを実行したい)
名前
匿名
題名 【JNI】呼び出し元クラスメソッドを実行したい
質問内容

質問を評価する
(0ポイント)
☆やりたいこと
JNI実行時のログをUIに表示するため、JNIのクラスメソッドを呼び出したい。

☆環境
Windows7 Ulti x64
eclipse 4.2.2
Android 4.0.4(arm) Emulator
ターゲット Android 2.3.3(API10)
Java 1.6.0.26
※NVIDIAのtegra-devpack-2.0にPleiades プラグインで日本語化してあります。

☆問題
staticメソッドは実行出来るのに、クラスメソッドが実行出来ない

☆java
...
public void AddLog(String text) 
{
    //txtLog.setText(text);
    Log.d(TAG, text);
}
public static void stAddLog(String text) 
{
    //txtLog.setText(text);
    Log.d(TAG, text);
}
...

☆c
jboolean
Java_com_example_jni_test_MainActivity_MethodCall( JNIEnv* env, jobject thiz, jstring value)
{
    jclass   cls;
    jmethodID mid;

    cls = (*env)->GetObjectClass(env, thiz);
    if( cls == 0 ) return JNI_FALSE;

#if 1
    // Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1)
    mid = (*env)->GetMethodID(env, cls, "AddLog", "(Ljava/lang/String;)V");
    if( mid == 0 ) return JNI_FALSE;
    (*env)->CallVoidMethod(env, cls, mid, value);
#else
    // ok
    mid = (*env)->GetStaticMethodID(env, cls, "stAddLog", "(Ljava/lang/String;)V");
    if( mid == 0 ) return JNI_FALSE;
    (*env)->CallStaticVoidMethod(env, cls, mid, value);
#endif

    return JNI_TRUE;
}

質問日時 2013-03-30 15:17:29
名前
匿名
回答内容

回答を評価する
(0ポイント)
マルチポストしました。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13104790098
回答日時 2013-03-30 19:37:22
名前
匿名
回答内容

回答を評価する
(0ポイント)
マルチポスト側で解決しました。

CallVoidMethodの第二引数はjobjectで、テストコードでいうthiz引数を渡すことにより動作しました。
回答日時 2013-04-01 01:35:00

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道