2012-07-08 4 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; 
} 

어떻게 내가 대신 정적 (stop)는 '종료 방법'을하지 않는 이유가 궁금

답변

1

env->CallVoidMethodV(env, obj, mid, args);에서 obj을받을 수 있나요? 그럼 당신은 당신이 대신 대신 NewObject으로 객체를 생성하고, 그 메소드를 호출이 개체를 사용할 수 있습니다

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

... 이런 식으로 뭔가에 의해 InvokeShutdown 내에서 호출 할 수 있지만, 조금 ... 중복 될 것이다 , 나는 생각한다.

관련 문제