4

每当我使用 Java Attach API 时,都不会返回有效的 VirtualMachines。我已经尝试遍历 VirtualMachine.list() 返回的列表,并且任何时候我认为我已经获得了进程 ID,我尝试使用 VirtualMachine.attach() 它给了我一个 NullPointerException 因为 attach() 方法它本身从不初始化它试图抛出的异常。我正在通过 Eclipse 处理该项目,应用程序本身的 Windows 进程在运行时是 javaw.exe。我究竟做错了什么?

4

2 回答 2

3

当我使用 JRE 中的 java.exe 而不是 JDK 中的 java.exe 时,我遇到了类似的问题。

通过 eclipse 执行的应用程序运行良好,并且通过 VirtualMachine.list() 正确检测到所有 VM,但是当我尝试使用 JRE 中的 java.exe 执行独立应用程序时,没有检测到 VM。然后我注意到我在 Eclipse 中使用了 JDK,所以我将独立应用程序中的 java.exe 从 JDK 更改为 java,并且一切正常。

将 Eclipse 项目的 Runtime JRE 更改为 JDK,然后重试。这可能会解决您的问题。

于 2012-07-30T12:33:43.180 回答
0

发现 VM 的代码在 Java 8 的 tools.jar 中。这就是为什么需要从 JDK 运行的原因。

使用模块化 Java,您需要“jdk.attach”模块,您可以使用 jlink 将其添加到 JRE。

于 2022-02-10T23:49:45.637 回答