【发布时间】:2014-04-17 08:19:16
【问题描述】:
我正在尝试从 c++ 调用 Java 方法。
C++
JNIEXPORT void JNICALL Java_ru_sploid_platerecog_RecogActivity_FindFeatures(JNIEnv* env, jobject job, jlong addr_rgba)
{
Mat& m_rgba = *(Mat*)addr_rgba;
try
{
const pair< string, int > fn = read_number( m_rgba, 10 );
jclass clazz = env->FindClass("ru/sploid/platerecog/RecogActivity");
jmethodID meth=env->GetMethodID(clazz,"onGetNumber","(Ljava/lang/String;)V");
env->CallVoidMethod(job,meth,fn.first.data());
// cv::putText( m_rgba, fn.first.empty() ? string( "not found" ) : fn.first, cv::Point( 20, 100 ), CV_FONT_HERSHEY_PLAIN, 2.0, cv::Scalar( 255, 0, 0, 0 ) );
}
catch ( const std::exception& e )
{
cout << "Catch exception: " << e.what() << endl;
cv::putText( m_rgba, "Exception", cv::Point( 20, 100 ), CV_FONT_HERSHEY_PLAIN, 2.0, cv::Scalar( 255, 0, 0, 0 ) );
}
}
Java:
public void onGetNumber(String plate){
plat=plate;
runOnUiThread(new Runnable() {
@Override
public void run() {
if (plat!=null)
Toast.makeText(getApplicationContext(), plat, Toast.LENGTH_LONG).show();
else
Toast.makeText(getApplicationContext(), "((", Toast.LENGTH_LONG).show();
}
});
}
应用关闭
03-12 23:33:29.172: A/libc(21987): Fatal signal 11 (SIGSEGV) at 0x323030b9 (code=1)
我认为我在 C++ 中有错误。谢谢
【问题讨论】:
-
发布完整的堆栈跟踪,或者至少发布更多。
-
@ChrisStratton 不再有趣。只有简单的 openCV 消息
-
然后查找并禁用阻止您获取堆栈跟踪的任何异常处理程序。或者在ndk-gdb下运行。或者在您的本机代码中添加一些日志记录。但是让人们猜测错误位置是不合理的。
-
@ChrisStratton 我会做的
标签: java android c++ android-ndk