如何在从JNI调用的代码中捕获System.exit()

时间:2010-12-28 00:24:08

标签: java-native-interface

我正在编写一个调用System.exit()的java库的C接口。我打电话给:

/* Calls the main method for the class */
printf("about to call main\n");
(*env)->CallStaticVoidMethod(env, mainClass, mainMethod, args);
printf("returning from main\n");

我(很遗憾)没有更改库的选项,但我仍然希望JVM将控制权返回给C调用函数(所以我可以做各种清理任务等等)。有没有办法让JNI这样做,或者我是SOL?

谢谢,

1 个答案:

答案 0 :(得分:8)

对于这么简单的情况你不需要字节码编辑,在好的旧java中实现了很多安全处理。

System.setSecurityManager(SecurityManager)checkExit()中抛出一些错误(如ThreadDeath)并假设在同一个线程中调用System.exit(int) [erm Runtime.getRuntime().exit(int)],它应该这样做。