2012-07-08 39 views
0

我正在嘗試爲我的Java服務器編寫windows服務。這裏是我寫我的invokeshutdown方法。但我很困惑我將如何得到jobject參考。如何在invokeshutdown方法中獲得jobject

DWORD WINAPI InvokeShutdown(LPVOID lpParam) { 
    JNIEnv *env; 
    jclass cls; 
    jmethodID mid; 
    //Since the JVM was created in a another thread. We have to attach the thread 
    //to JVM before making " calls 
    vm->AttachCurrentThread((void **)&env, 0); 
    cls = env->FindClass("com.my.internal.Launcher"); 
    // Create the argument list. 
    va_list args; 
    va_start(args, "-dir=stop"); 

    mid = env->GetMethodID(env, cls, "stop", "()V"); 

    env->CallVoidMethodV(env, obj, mid, args); 

    vm->DetachCurrentThread(); 
    Log("Detached thread\n"); 
    return 0; 
} 

我如何獲得env->CallVoidMethodV(env, obj, mid, args);

回答

1

obj我不知道你爲什麼不進行 'shutdown方法'(stop)靜態呢?然後,你可以通過這樣的內InvokeShutdown叫它...

cls = env->FindClass("com.my.internal.Launcher"); 
    mid = env->GetStaticMethodID(cls, "stop", "()V"); 
    env->CallStaticVoidMethod(cls, mid, 0); 
    vm->DetachCurrentThread(); 

您可以創建一個對象,而不是用替代NewObject,並使用這個對象調用它的方法,但它是一個有點...冗餘, 我想。