1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем alexandrage, 15 май 2018.

  1. Автор темы
    alexandrage

    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();
    }
    
     
  2. Santa

    Santa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Jewish_Cat
    Не у всех есть JAVA_HOME. Проверено у школьников
     
  3. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Обычно стоит проверять возвращаемые значения.
     
  4. Автор темы
    alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Я в курсе. Но по скольку я не сппзадрот == лень.
     
  5. Автор темы
    alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Это не столь важно, когда лаунчер качает жабу в свою директорию.
    string JAVA_HOME("C:/jre-x64");
    Тут всего лишь пример юза jni.
     

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