当我调用VirtualMachine.list()时,它在eclipse和jdk上工作正常。但是一旦我改为jre,或者我在eclipse中尝试我的应用程序,这种方法似乎每次都返回一个空列表。我需要能够在JRE的任何地方运行我的应用程序。
for(VirtualMachineDescriptor jvm : VirtualMachine.list()){
System.out.println("jvm: " + jvm.displayName());
}
答案 0 :(得分:1)
我需要能够在JRE的任何地方运行我的应用程序。
在这种情况下,您不应该使用com.sun.tools.attach.VirtualMachine
类,因为VirtualMachine
只是JDK的一部分,而不是JRE。
tools.jar
,您仍然无法在任何JRE 上运行它,因为tools.jar
具有特定于平台的部分,它取决于JRE中也缺少的本机库(libattach.so)。因此,有以下选项:
tools.jar
的情况下列出正在运行的JVM,this answer可能会给您一个想法。答案 1 :(得分:0)
我有点困惑。在我看来,VirtualMachine类不属于任何JRE,因为它包含在tools.jar中,所以它只能从JDK获得。可能,您可能希望将tools.jar的内容包含在应用程序jar文件中,或者分发tools.jar并将其添加到运行时的classpath中。 您的代码将按预期运行,并列出您的程序正在运行的jvm,以及在同一个jvm中运行的任何程序。