如何从C++应用程序中调用Java函数?
我知道可以通过CMD(或类似技术)来调用它们,但我不想使用它们。
package foo;
public class bar {
public static int timesTen(int input){
return input * 10;
}
}
jclass myClass = env->FindClass("foo.bar");
jmethodID mid = env->GetStaticMethodID(myClass, "timesTen", "(I)I");
jint hundred = env->CallStaticIntMethod(myClass, mid, (jint)10);
JNIEnv* env(0);
jint rv = vm->GetEnv((void**)&env, JNI_VERSION_1_6);
if (rv == JNI_OK) {
return env;
} else if (rv == JNI_EDETACHED) {
// This happens if you created the thread, not the JVM
rv = vm->AttachCurrentThread((void**)&env, 0);
if (rv != JNI_OK) {
// error
}
} else {
// error
}
我想强调的是,使用JNI从C/C++调用Java非常繁琐且容易出错。错误往往具有密码学和低级特征。你必须处理异常,并且必须分离线程,否则会变得混乱不堪。
env
? - Nayuki另一种从CPP调用Java方法的简单方法是通过批处理文件。
system()
如何从CPP调用exe或bat文件的方法。将您的类与Java路径和类路径放在批处理文件中,并使用system("batch-file-name.bat")
从CPP调用该批处理文件。
这很简单直接。