VirtualMachine.list()返回空列表

时间:2017-07-12 09:09:07

标签: java eclipse jvm

当我调用VirtualMachine.list()时,它在eclipse和jdk上工作正常。但是一旦我改为jre,或者我在eclipse中尝试我的应用程序,这种方法似乎每次都返回一个空列表。我需要能够在JRE的任何地方运行我的应用程序。

for(VirtualMachineDescriptor jvm :  VirtualMachine.list()){
        System.out.println("jvm: " + jvm.displayName());
}

2 个答案:

答案 0 :(得分:1)

  

我需要能够在JRE的任何地方运行我的应用程序。

在这种情况下,您不应该使用com.sun.tools.attach.VirtualMachine类,因为VirtualMachine只是JDK的一部分,而不是JRE。

  • 如果不分发整个JDK,Oracle许可协议不允许distribute tools.jar使用您的应用程序。
  • 即使您在应用中包含tools.jar,您仍然无法在任何JRE 上运行它,因为tools.jar具有特定于平台的部分,它取决于JRE中也缺少的本机库(libattach.so)。

因此,有以下选项:

  1. 在运行应用程序之前需要安装JDK。
  2. 将整个JDK与您的应用程序捆绑在一起。
  3. 从头开始实现缺少的功能。如果您正在查看如何在不使用tools.jar的情况下列出正在运行的JVM,this answer可能会给您一个想法。

答案 1 :(得分:0)

我有点困惑。在我看来,VirtualMachine类不属于任何JRE,因为它包含在tools.jar中,所以它只能从JDK获得。可能,您可能希望将tools.jar的内容包含在应用程序jar文件中,或者分发tools.jar并将其添加到运行时的classpath中。 您的代码将按预期运行,并列出您的程序正在运行的jvm,以及在同一个jvm中运行的任何程序。