2010-12-28 8 views
3

System.exit()を呼び出すJavaライブラリへのCインターフェイスを作成しています。私が呼ん:JNIから呼び出されたコードでSystem.exit()をトラップする方法

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

I(残念ながら)ライブラリを変更するオプションを持っていないが、私はまだJVMがCの呼び出し元の関数に戻って制御を返すためのように(私は様々なクリーンアップを行うことができますしたいですタスクなど)。 JNIにそれをさせる方法はありますか、それとも私はSOLですか?あなたはとても単純なケースのためのバイトコードの編集を必要としない

+1

なぜ悲観的な、間違った答えが受け入れられるのですか? – Philippe

+0

私はライブラリからソースにアクセスして、あなたが提案した変更を加えることができないためです。私が何かを逃していない限り。 – PerilousApricot

答えて

8

おかげで、セキュリティ処理の多くは、古き良きJavaで実装されています。

System.setSecurityManager(SecurityManager)checkExit()で投(のThreadDeathのような)いくつかのエラーとSystem.exit(int) [ERM Runtime.getRuntime().exit(int)]を仮定して、同じスレッドで呼び出され、それはそれを行う必要があります。

+0

私より軽い – bmargulies

関連する問題