0

我正在尝试为我的 Java 服务器编写 Windows 服务。这是我编写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;
}

我怎么obj进去env->CallVoidMethodV(env, obj, mid, args);

4

1 回答 1

1

我想知道您为什么不将“关闭方法”(stop)设为静态呢?然后你可以InvokeShutdown通过这样的方式在内部调用它......

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

您可以改为创建一个对象NewObject,并使用该对象调用其方法,但这有点……多余,我想。

于 2012-07-08T18:38:09.533 回答