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

标签 java c++ jvm java-native-interface

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

JNI_GetCreatedJavaVMs(&jvm,1,&vmnb);

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

jvm->AttachCurrentThread((void**)&env, NULL);

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

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

最佳答案

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

关于java - 如何在 C++(JNI) 中设置正在运行的 JVM 的类路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45232522/

相关文章:

javascript - 是什么阻止 HtmlUnit 加载 PSN 商店页面?

java - 如何纠正无语法约束错误

java - 使用 FFProbe 获取视频 fps

c++ - 如何将静音音频数据写入音频流?

java - java 1.8 中的 jstack/jmap 替代方案

java - 当我从 C++ 调用 Java 方法时,我应该调用 PushLocalFrame 和 PopLocalFrame 吗?

c++ - 函数 isalnum() : unexpected results

c++ - 如何在 C 或 C++ 中实现 3d kDTree 构建和搜索算法?

java - 自定义类加载问题

java - Spark 执行器: Invalid initial heap size: -Xms0M