Java 如何在invokeshutdown方法中获取jobject

Java 如何在invokeshutdown方法中获取jobject,java,c++,java-native-interface,Java,C++,Java Native Interface,我正在尝试为我的Java服务器编写windows服务。下面是我如何编写invokeshutdown方法的。但我对如何在这里获得jobjectreference感到困惑 DWORD WINAPI InvokeShutdown( LPVOID lpParam ) { JNIEnv *env; jclass cls; jmethodID mid; //Since the JVM was created in a another thread. We have to at

我正在尝试为我的Java服务器编写windows服务。下面是我如何编写
invokeshutdown
方法的。但我对如何在这里获得
jobject
reference感到困惑

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)中获取
obj

我想知道为什么不将“关机方法”(
停止
)改为静态?然后您可以在
InvokeShutdown
中通过以下方式调用它

  cls = env->FindClass("com.my.internal.Launcher");
  mid = env->GetStaticMethodID(cls, "stop", "()V");
  env->CallStaticVoidMethod(cls, mid, 0);
  vm->DetachCurrentThread();
您可以使用
NewObject
创建一个对象,并使用此对象调用其方法,但这会有点。。。我想是多余的