0

もっと知識のある人が周りにいることを願って、ここに行きます。C から Java インスタンス メソッドを呼び出そうとする試みはほぼ成功しますが、非常に弱い立場にあります...

問題 #1 - 次のような Java メソッドの呼び出し:

public void publishResult(String fromV8)
{
    try
    {
        //final String backupBuffer = "tututu";
        final String backupBuffer = String.valueOf(fromV8);
        runOnUiThread(new Runnable() {

            @Override
            public void run() 
            {
                ((TextView)findViewById(46)).setText(backupBuffer);
            }
        });
    } catch (Exception ex) 
    {
        ex.printStackTrace();
    }
}

動作しますが、「fromV8」パラメーターで何かをしようとするとすぐに、JVM は LogCat に次のようなエラー メッセージを表示して終了します。

04-26 00:16:10.714: INFO/DEBUG(14398): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-26 00:16:10.714: INFO/DEBUG(14398): Build fingerprint: 'LGE/thunderg/thunderg/thunderg:2.2/FRF91/eng.swapan.pati.20101012.153426:user/release-keys'
04-26 00:16:10.714: INFO/DEBUG(14398): >>> com.example.hellojni <<<
04-26 00:16:10.714: INFO/DEBUG(14398): signal 11 (SIGSEGV), fault addr 6c6c65bc
04-26 00:16:10.714: INFO/DEBUG(14398):  r0 00000001  r1 00000001  r2 42f8bf90  r3 0022e1a8

           [......plenty of registries and stack hexdump.....stripped]

04-26 00:16:10.814: INFO/DEBUG(14398):     46b5ed04  aca508fb  /system/lib/libdvm.so
04-26 00:16:11.124: INFO/ActivityManager(1363): Process com.example.hellojni (pid 16632) has died.
04-26 00:16:11.134: INFO/WindowManager(1363): WIN DEATH: Window{452be390 com.example.hellojni/com.example.hellojni.HelloJni paused=false}
04-26 00:16:11.134: INFO/WindowManager(1363): Setting rotation to 0, animFlags=1
04-26 00:16:11.144: INFO/BootReceiver(1363): Copying /data/tombstones/tombstone_09 to DropBox (SYSTEM_TOMBSTONE)
04-26 00:16:11.154: INFO/ActivityManager(1363): Config changed: { scale=1.0 imsi=226/5 

loc=en_GB touch=3 keys=1/1/2 nav=1/1 orien=1 layout=18 uiMode=17 seq=65}

そして問題 2 - パラメータで何もせずに Java メソッド内にブレークポイントを設定しても、JVM は再び異常終了します。結果は再び LogCat にあり、上記の結果に似ていますが、余分な 2 行があります。

04-26 00:26:29.821: WARN/dalvikvm(16864): JDWP: slot 4 expected to hold object, 0x22e7b0 invalid
04-26 00:26:29.821: ERROR/dalvikvm(16864): VM aborting
[...+ SAME AS ABOVE...]

コンソールに例外トレースが表示されることは一度もありません。これらは一般的な症状ですか、それとも何ですか?

ありがとうございました!

4

2 に答える 2

2

FROM c/c++ TO Java に渡されたオブジェクト パラメータを怠ったときに、この問題を見たことがあります (私にとって、バグベアは文字列のようです)。

env->CallStaticVoidMethod(interfaceClass, sendaString2Java, "Send me to Java");

コンパイルは問題なく実行できますが、実行時エラーがスローされます。

11-26 13:08:54.770: W/dalvikvm(1818): JDWP: slot 1 expected to hold object, 0xbea7a38c invalid

返す前に「Javaオブジェクト」を返したいオブジェクトを作成すると、すべて問題ありません

env->CallStaticVoidMethod(interfaceClass, sendaString2Java, env->NewStringUTF("Send me to Java"));

うまく動作します。

http://android.wooyd.org/JNIExample/の例に 本当に頼っていますが、cpp ファイルが JNI フォルダーではなく assets フォルダーにある理由を実際に理解することはできませんでした。

于 2012-11-26T13:16:30.397 に答える
0

フォールトアドレス6c6c65bcSIGSEGVは、無効なメモリ参照またはセグメンテーションフォールト(SIGSEGV)を示します。 ネイティブコードからの例外については、C /C++側でメソッドを明示的に呼び出す必要があります。詳細については、ここで例外を見つけることができます。
ExceptionDescribe()

于 2011-06-16T10:08:16.583 に答える