所以如果我们连接,我们必须在完成后分离线,对吗?
JNIEnv* get_jni_env()
{
JNIEnv* res;
JAVA_VM->GetEnv((void**) &res, JNI_VERSION_1_6);//Using cached JavaVM
JAVA_VM->AttachCurrentThread(&res, NULL);
return res;
}
我调用下一个本机方法从@覆盖保护无效onDestroy()我的活动类
void free_jni_manager()
{
JNIEnv* env = get_jni_env();
... //Here i delete global refs (jclass)
//JAVA_VM->DetachCurrentThread();
}
错误:使用interp帧分离线程(计数=16)-主线程仍在运行,我们尝试分离它。
即使我们使用任何使用JNIEnv的函数(例如调用java方法),放置DetachMoney tThread也会导致同样的错误。
如果在pthread函数中使用,DetachCurrentThread可以完美地工作
static void* thread_func(void* arg)
{
get_jni_env(); // attach new thread
//Do thread stuff
JAVA_VM->DetachCurrentThread();//thread done detached it with ok
return NULL;
}
我们需要分离主线程吗?然后我们用JNI完成了,可以吗?否则活动将被破坏,它将用JavaVM释放自己?我们是否需要调用DestroyJavaVM()(如果使用onDestroy,只需执行崩溃),免费缓存的JavaVM或垃圾清理器将如何处理这个问题?
P、 使用AttachCurrentThreadAsDaemon()有什么好处
不要从主线程调用JNI处理函数。从主线程调用JNI处理函数将导致崩溃。
活动。onDestroy()
方法在UI线程上调用。为什么要尝试将Java虚拟机与UI线程分离?该线程由系统管理,您不应该将Java虚拟机与之连接或分离。
JNIEnv*
可用于每个本机方法作为第一个参数。为什么首先需要get_jni_env()
?
如果您需要工作线程上的JNIEnv,那么您需要附加和分离(或者从Java生成一个线程;这很容易)。
编辑:如果是重复附件,则不需要拆离。这不是一个参考计数系统<代码>AttachCurrentThread记录为
尝试附加已经附加的线程是没有操作的。
而不是需要匹配的附加/分离调用。
我在Laravel4和MySQL中使用PHP,我不知道如何处理货币值。 我想使用以下格式显示它们: 金额字段的类型为。 我应该像或像那样保存金额吗?
我想使用java Money API(
我试过... 但那就不允许便士条目了。 我想要增量按钮控制在英镑上升,但仍然想要输入便士的能力。 谢谢,1DMF
我可以使用ISO 4217代码轻松设置货币,例如“USD”。这将使我能够使用抓取美元符号。getSymbol(),但是,我该如何从货币中提取显示名“dollar”? 我有一个微调器,我想用“美元”、“欧元”、“日元”等货币的名称填充。但是,我无法从ISO 4217代码中提取这些名称。这不是很容易吗? 请注意,我不能使用简单的字符串数组来解决这个问题。这是因为我获取了默认的语言环境,并将其货币添加到
这听起来可能很基本,但在中,我应该清理什么?如果片段正在被销毁,是否应该为我自动清理引用(如上下文)?
我有一个简单的控制台应用程序,有时需要执行图形操作,对于那些我使用JavaFx框架(有一些功能,我需要像css样式的文本)我只是生成一些形状和文本到一个隐藏的场景,然后保存在文件中仅此而已, 我知道要使用JavaFx,我必须将图形操作传递给JavaFx线程,但是当一切都完成后,我必须关闭应用程序(几个小时后),这个JavaFx线程仍然保持打开...我真的不想强行退出System.exit(),因为