Java 如何在invokeshutdown方法中获取jobject
我正在尝试为我的Java服务器编写windows服务。下面是我如何编写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
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
创建一个对象,并使用此对象调用其方法,但这会有点。。。我想是多余的