- Баллы
- 173
Дан что что то не было статеек по плюсам и лаунчерам на них.
Запуск java через jni на cpp. Собстно вот. Может кому пригодится.
Запуск java через jni на cpp. Собстно вот. Может кому пригодится.
Код:
#include <jni.h>
#include <windows.h>
#include <string>
using namespace std;
typedef jint(JNICALL *JNI_CREATEJAVAVM)(JavaVM **, JNIEnv **, void *);
JNI_CREATEJAVAVM jni_JNI_CreateJavaVM = NULL;
extern "C" __declspec(dllexport)
int main() {
using namespace std;
JavaVM *jvm;
JNIEnv *env;
string JAVA_HOME(getenv("JAVA_HOME"));
string JVM_DLL("/bin/server/jvm.dll");
string JVM_HOME = JAVA_HOME+JVM_DLL;
HMODULE hJvm = ::LoadLibrary(JVM_HOME.c_str());
jni_JNI_CreateJavaVM = (JNI_CREATEJAVAVM)GetProcAddress(hJvm, "JNI_CreateJavaVM");
JavaVMOption options[1];
string launcher ="-Djava.class.path="+JAVA_HOME+"/Launcher.jar";
char *options1 = &launcher[0u];
options[0].optionString = options1;
JavaVMInitArgs args;
args.options = options;
args.nOptions = 1;
args.ignoreUnrecognized = FALSE;
args.version = JNI_VERSION_1_8;
jni_JNI_CreateJavaVM(&jvm, &env, &args);
jclass class_Launch = env->FindClass("net/launcher/run/Mainclass");
jobjectArray str_array = env->NewObjectArray(12, env->FindClass("java/lang/String"), env->NewStringUTF(""));
env->CallStaticVoidMethod(class_Launch, env->GetStaticMethodID(class_Launch, "main", "([Ljava/lang/String;)V"), str_array);
jvm->DestroyJavaVM();
}