2012-02-13 6 views
3

私は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アプリケーションを起動して起動する場合は、これが可能です。 誰もがこれを回避する方法を知っているかもしれません。

+1

あなた自身の質問に答えた場合は、以下の回答を回答として投稿し、それを受け入れるべきです - これは完全に有効です。彼らはそれが答えられていないと思う。 – Steve

+0

確かに私はこれを行います - 残念ながら、私は次の6時間以内にそうすることは許されません... – SideEffect

答えて

1

です。私はちょうどJNI(RTFM;)で利用可能な方法を確認するだけで役に立つことがあることに気づいた

とにかく、実際には黒い魔法ではなく、確かに可能であり、いくつかの人がここで投票したようにこの質問。

Javaから呼び出し可能なネイティブメソッドをexecの中に開いてもいいですか?それを登録して関数ポインタを渡す必要があります!それはCでどのように見えるか ザッツ:私たちは、Javaコードで上記の名前の関数を配置する必要があるほか

//this is the function that shall be called from Java code 
void JNICALL setWindowClosed(JNIEnv *env, jobject self, jboolean b){ 
    statusByte = (b==JNI_TRUE) ? true : false; 
} 

int main(){ 
JNIEnv* env; 
JavaVM* jvm; 
/* 
create JavaVM and instantiate desired class 

JNI_CreateJavaVM(...) 
*/  
jclass cls = env->FindClass("ClassName"); 

//we have our class - now register our function 
JNINativeMethod nativeMethod; 
nativeMethod.name = "setWindowClosing"; //this is the corresponding name in Java 
nativeMethod.signature = "(Z)V"; //parameter contains a boolean and returns void 
nativeMethod.fnPtr = setWindowClosed; //pointer to our function 
env->RegisterNatives(cls, &nativeMethod, 1); //register native method to Java 
} 

:これだけ

private native void setWindowClosing(boolean b); 

- Javaで関数を呼び出すと、それC/C++で実装を使用します。私のウィンドウが閉じられたら、アプリケーションは正常にシャットダウンされます:)

0

Youtは、IPC用のソケットを開いて「閉じる」メッセージを待つことができます。それはほとんど言語にとらわれず、lotdocumentation

関連する問題