希望周围有更多知识渊博的人,我在这里。从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中,它类似于上面的那个,但有一些额外的两行:
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 :(得分:2)
我之前看到这个问题,当我对从c / c ++ TO Java传递的对象参数变得懒惰时(对我而言,bugbear似乎是字符串)。
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文件在assets文件夹而不是JNI文件夹中。
答案 1 :(得分:0)
ExceptionDescribe()
。您可以在此处找到更多详细信息Exceptions。