我正在从JNI调用本机dll的方法。它工作正常,但在我的本地代码中的一个地方,我调用exit(1)以便本机代码停止工作,但是会发生的是它也会导致从我的Java应用程序中退出。我错过了什么吗? JNI中是否有任何方法,这样我只能杀死本地代码而不是整个Java应用程序?JNI中的本机代码退出Java应用程序
编辑:基本上我用本地代码加密文件。我希望它在某人从java取消操作时停止加密。
任何帮助将不胜感激。
我正在从JNI调用本机dll的方法。它工作正常,但在我的本地代码中的一个地方,我调用exit(1)以便本机代码停止工作,但是会发生的是它也会导致从我的Java应用程序中退出。我错过了什么吗? JNI中是否有任何方法,这样我只能杀死本地代码而不是整个Java应用程序?JNI中的本机代码退出Java应用程序
编辑:基本上我用本地代码加密文件。我希望它在某人从java取消操作时停止加密。
任何帮助将不胜感激。
JNI本机代码和JVM在同一进程中运行。由于exit
关闭了该进程,因此它也将结束JVM。
杀死一个在本地代码中执行的线程可能会泄漏资源,因此不受支持。查看here了解更多详情。
如果在本机代码的单独线程中,只需停止。
//sample thread code
void thread(){
while (1) {
//do something
if (done) return;
}
}
如果您在本机函数中并且想返回到Java,则返回。
如果你已经做出了功能调用和循环的纠结迷宫;所有这些都需要退出,然后抛出一个本地异常,在最后的本地级别捕获并返回。 这是不推荐它应该不推荐,但有时你可能会陷入这种混乱。
3210我所做的是在单独的线程,在需要时运行的加密代码,并终止与主线程terminatethread()新创建的线程,但问题是,terminatethread()不释放资源(文件句柄等),我无法在线程关闭后立即从java中删除文件。
你是什么意思的“本机代码停止”? – Henry