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代わりに、「シャットダウン メソッド」( ) を static にしないのはなぜですか? 次に、このようなもので呼び出すことができます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 に答える