如何在 C++(JNI) 中设置正在运行的 JVM 的类路径?

wah*_*eed 4 c++ java java-native-interface jvm

在 C++ (JNI) 中,我使用以下 JNI 函数获得已经运行的 JVM:

JNI_GetCreatedJavaVMs(&jvm,1,&vmnb);
Run Code Online (Sandbox Code Playgroud)

然后我使用以下代码附加当前线程:

jvm->AttachCurrentThread((void**)&env, NULL);
Run Code Online (Sandbox Code Playgroud)

问题:在这种情况下我该如何设置类路径?谢谢。

注意:创建一个新的JVM 并将 vm_args 中的类路径传递给新的 JVM对我来说不是一个选择。

wah*_*eed 5

由于可以附加classpath内部Java,所以我找到了另一种通过Java在C++内部设置类路径的方法。由于我已经在运行 JVM,因此我在已在 JVM 中运行的 Java 程序中使用附加类路径方法(在本答案void addPath(String path)中发布)。我使用 JNI 调用从 C++ 访问 java 方法以附加类路径。从 C++传递给方法的类路径不应包含,它应该只是 .jar 文件的完整路径,即. 因此顺序是:1)获取已经运行的 JVM,将当前线程附加到 JVM,获取 JNI 环境指针,然后使用 JNI 从 C++ 调用 java 函数(另一个正在运行的线程)。我现在可以从 C++ 成功访问新类路径(.jar 文件)的类。addPathaddPath"-Djava.class.path""C:\\folder\\abc.jar"addPath