2010-08-06 128 views
0

这是我的情况,它有点复杂,但它必须这样。我正在从Java实现一个使用JNative打开应用程序的程序。该应用程序是用C++编写的。但是当应用程序完成时,我希望它回调到Java让Java知道运行已完成。我可以这样做吗?我知道我应该使用JNI,但我没有找到有关这方面的例子。谢谢。从C++回调Java方法

回答

1

“打开应用程序”是指启动外部进程还是进行库调用?

如果您刚启动可执行文件,则可以使用Runtime.getRuntime().exec来启动进程,并使用返回的进程句柄从进程获取返回代码。您还可以从您启动的流程中采集getInputStream的流程输出。然而,如果你真的调用了C进程,那么是的,JNI将是一个首选的解决方案。你可以找到JNI一个很好的教程回调Java对象的位置:http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html

它从教程的症结是:

JNIEXPORT void JNICALL 
Java_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jint depth) 
{ 
    jclass cls = (*env)->GetObjectClass(env, obj); 
    jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V"); 
    if (mid == 0) 
    return; 
    printf("In C, depth = %d, about to enter Java\n", depth); 
    (*env)->CallVoidMethod(env, obj, mid, depth); 
    printf("In C, depth = %d, back from Java\n", depth); 
} 

总之,在C你需要在你面前获得方法可以调用它。您也可以使用javap工具生成方法签名,以便您可以调用它们。