当我调用 VirtualMachine.list() 时,当我在 eclipse 和 jdk 上时它工作正常。但是一旦我更改为 jre,或者我在 eclipse 中尝试我的应用程序,此方法似乎每次都会返回一个空列表。我需要能够仅使用 JRE 在任何地方运行我的应用程序。
for(VirtualMachineDescriptor jvm : VirtualMachine.list()){
System.out.println("jvm: " + jvm.displayName());
}
最佳答案
I need to be able to run my application anywhere wih just a JRE.
在这种情况下,您不应使用 com.sun.tools.attach.VirtualMachine
类,因为 VirtualMachine
只是 JDK 的一部分,而不是 JRE。
- Oracle 许可协议(protocol)不允许distribute tools.jar与您的应用程序一起使用,而无需分发整个 JDK。
- 即使您在应用程序中包含
tools.jar
,您仍然无法在任何 JRE 上运行它,因为tools.jar
具有特定于平台的部分,并且它依赖于 JRE 中也缺少的 native 库 (libattach.so)。
因此,有以下选择:
- 在运行应用程序之前需要安装 JDK。
- 将整个 JDK 与您的应用程序捆绑在一起。
- 从头开始实现缺失的功能。如果您正在寻找如何在不使用
tools.jar
的情况下列出正在运行的 JVM,this answer可能会给你一个想法。
关于java - VirtualMachine.list() 返回空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45053288/