자바 클래스 찾기 2/2
$ vi FindClass2.cpp#include <jni.h>
#include <iostream>
#include <algorithm>
#include <string>
/**
* 클래스 이름으로 클래스를 찾는다.
*/
JNIEXPORT void JNICALL findClass2
(
JNIEnv *env,
jobject thiz,
jstring className
)
{
//convert java-string to c-string
const char *cName = env->GetStringUTFChars(className, nullptr);
std::string name = std::string(cName);
env->ReleaseStringUTFChars(className, cName);
//convert com.package.someclass to com/package/someclass
std::replace(name.begin(), name.end(), '.', '/');
//find some class
jclass someClass = env->FindClass(name.c_str());
if(someClass == nullptr) {
std::cout << "Failed to find the " << name << " class" << std::endl;
} else {
std::cout << "Success to find the " << name << " class" << std::endl;
}
}
JNIEXPORT jint JNICALL JNI_OnLoad
(
JavaVM *vm,
void *reserved
)
{
JNIEnv *env;
if(vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6)) {
return -1;
}
JNINativeMethod nm[1] = {
{
const_cast<char*>("findClass2"),
const_cast<char*>("(Ljava/lang/String;)V"),
reinterpret_cast<void*>(findClass2)
}
};
jclass cls = env->FindClass("Client");
env->RegisterNatives(cls, nm, 1);
return JNI_VERSION_1_6;
}Last updated