Задать вопрос
@aselockd

Как правильно установить значения интерпретатора для того, чтобы запустить клиент minecraft?

Сам код запуска клиента игры:

#include "mainwindow.h"

#include <QApplication>
#include <jni.h>
#include <iostream>

int main(int argc, char *argv[])
{
    JavaVM *jvm;
    JNIEnv *env;
    JavaVMInitArgs vm_args;
    JavaVMOption options[1];

    // Specify the path to the JAR file
    options[0].optionString = "-Djava.class.path=C:\\Users\\night\\AppData\\Roaming\\.minecraft\\versions\\1.21.11\\1.21.11.jar";
    vm_args.version = JNI_VERSION_1_6; // JNI version
    vm_args.nOptions = 1;
    vm_args.options = options;
    vm_args.ignoreUnrecognized = false;

    // Create Java VM
    jint ret = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
    if (ret != JNI_OK) {
        std::cout << "Unable to launch JVM" << std::endl;
        //return EXIT_FAILURE;
    }
    else
    {
        // Call the Java main method to execute your program
        jclass cls = env->FindClass("YourMainClass");
        jmethodID mid = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");

        jobjectArray args = env->NewObjectArray(0, env->FindClass("java/lang/String"), NULL);
        env->CallStaticVoidMethod(cls, mid, args);

        // Destroy the JVM
        jvm->DestroyJavaVM();
        //return EXIT_SUCCESS;
    }

    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

Вывод:

17:38:16: Starting D:\untitled2\build\Desktop_Qt_6_10_2_MinGW_64_bit-Debug\debug\untitled2.exe...
Error occurred during initialization of VM
Failed setting boot class path.
17:38:22: Команда «D:\untitled2\build\Desktop_Qt_6_10_2_MinGW_64_bit-Debug\debug\untitled2.exe» завершилась с кодом 1.
  • Вопрос задан
  • 168 просмотров
Подписаться 1 Простой 7 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++
    12 месяцев
    Далее
  • Skillbox
    Профессия Разработчик С++
 с нуля + ИИ
    7 месяцев
    Далее
  • Бруноям
    Разработчик на C++
    5 месяцев
    Далее
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Как я уже писал в комментариях под вопросом, ошибок в вашем коде больше одной. Во-первых,
у вас Java 8, соответственно должно быть JNI_VERSION_1_8, а не JNI_VERSION_1_6.

Во-вторых, надо открыть архиватором jar-файл майнкрафта, найти в нём файл MANIFEST.MF и посмотреть в нём значение атрибута Main-Class. Вероятно, там будет net.minecraft.server.Main. Тогда надо поменять строку
FindClass("YourMainClass") на FindClass("net/minecraft/server/Main")

В-третьих, вы проверяете результат выполнения JNI_CreateJavaVM, но ошибкой может закончиться и любая другая операция, включая FindClass, поэтому надо добавить ещё проверок ошибок, чтобы не гадать, что произошло, над невнятным сообщением "Failed setting boot class path".

В-четвёртых, CallStaticVoidMethod заблокируется до тех пор, пока сервер майнкрафта не будет остановлен, то есть окно Qt так и не будет отображено. Если оно вам нужно, придётся JVM запускать в QThread.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы