2011-04-25 4 views
0

もっと知りたい人がいらっしゃることを願って、ここに行きます。ほとんど成功CからJavaインスタンスメソッドを呼び出すための試みが、veery虚弱地面に...アンドロイドのJNIに関する問題 - Javaインスタンスメソッド

問題#1 - など、この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(); 
    } 
} 

は動作しますが、できるだけ早く私はJVMがLogCatでエラーメッセージのこの種で終了「fromV8」パラメータで何かをしようとして:

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...] 

は、コンソール内の任意の例外トレースをそこに示されています。これらの一般的な症状や何ですか?

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

答えて

0

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

2

この問題は、私がオブジェクトのパラメータをc/C++からJavaに渡すときに怠け者になった(bugbearはStringsと思われる)前に見ました。

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")); 
です

はうまく動作します。 私は本当にここに例を置いていますが、cppファイルがJNIフォルダではなくassetsフォルダにある理由を実際には理解できませんでした。

関連する問題