私はJavaアプリケーションをCから起動するためにJNIを使用します。これは、コンソールアプリケーションを使用している間はすぐに実行されますが、Swing-GUIの場合はちょっと面倒です。JavaからC-Executableの関数を呼び出すことはできますか?
アプリケーションを「生きている」状態に保つために、GUIが閉じられていない限り実行されるwhileループを使用します。このループが実行されている間は、ブール値を要求してアプリケーションがまだ実行中であれば、常に要求します。
while(javaRunning){
if(JNI_FALSE == env->CallBooleanMethod(obj, boolMethod))
javaRunning = false;
}
この値は、ユーザーがウィンドウを閉じることを示すためにJava関数WindowClosing(Event)が呼び出されたときに変更されます。
残念ながら、ウィンドウを閉じると、これはうまくいきません。ウィンドウが既に閉じられていても、Cアプリケーションはブール値を要求しようとします。明らかに、ウィンドウが閉じる前にブール値をフェッチすることはできません。 JavaからCコードを呼び出して、 "WindowClosing"イベントについて通知する方が良いでしょう。
CコードがJava(DLLを使用して)によって読み込まれ、呼び出しインターフェイスを経由せずにCアプリケーションがJavaアプリケーションを起動して起動する場合は、これが可能です。 誰もがこれを回避する方法を知っているかもしれません。
あなた自身の質問に答えた場合は、以下の回答を回答として投稿し、それを受け入れるべきです - これは完全に有効です。彼らはそれが答えられていないと思う。 – Steve
確かに私はこれを行います - 残念ながら、私は次の6時間以内にそうすることは許されません... – SideEffect