Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Стартап Запуск java через jni на cpp.

alexandrage

Старожил
Пользователь
Баллы
173
Дан что что то не было статеек по плюсам и лаунчерам на них.
Запуск 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();
}
 
Не у всех есть JAVA_HOME. Проверено у школьников
 

Поделиться этой страницей

Назад
Верх