- argc = static_cast<int>(env->GetArrayLength(jargs));
-
- argc++;
- char** argv = new char*[argc + 1];
- argv[0] = xbt_strdup("java");
-
- for (int index = 0; index < argc - 1; index++) {
- jstring jval = (jstring)env->GetObjectArrayElement(jargs, index);
- const char* tmp = env->GetStringUTFChars(jval, 0);
- argv[index + 1] = xbt_strdup(tmp);
- env->ReleaseStringUTFChars(jval, tmp);
+ argc += static_cast<int>(env->GetArrayLength(jargs));
+ xbt_assert(argc > 0);
+
+ // Need a static storage because the XBT layer saves the arguments in xbt::binary_name and xbt::cmdline.
+ static std::vector<std::string> args;
+ args.reserve(argc);
+
+ args.emplace_back("java");
+ for (int index = 1; index < argc; index++) {
+ auto jval = (jstring)env->GetObjectArrayElement(jargs, index - 1);
+ jstring_wrapper tmp(env, jval);
+ args.emplace_back(tmp.value);