java - VirtualMachine.list() 返回空列表

标签 java eclipse jvm

当我调用 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)。

因此,有以下选择:

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

关于java - VirtualMachine.list() 返回空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45053288/

相关文章:

java - 使用 Microsoft Authenticode 证书对 jar 文件进行签名

java - for循环中的值不变

java - 使用 Spring Data JPA 的服务层中的 Crud 方法

java - 使用Maven-Assembly打包单个jar

Java - 对象越少,使用的内存就越大

java - 我如何使用 restfb 在 Facebook 上分享帖子

java - Maven/Eclipse - 将项目更新到 Java7 搞砸了源文件夹

eclipse - 在 Eclipse 编辑器中不同的空白宽度

java - PSYoungGen 空间错误

java - 是否可以从不同的 JVM 调用 Java 应用程序中的方法?