2012-07-08 75 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,并使用这个对象调用它的方法,但它是一个有点...冗余, 我想。