Java getRuntime()结果取决于Netbeans版本

Java getRuntime()结果取决于Netbeans版本,java,netbeans,Java,Netbeans,我使用一些代码行通过检查计算机上正在运行的进程来检查特定软件程序是否正在计算机上运行。完整代码为: public static void main(String[] args) { try { String line; Process p = Runtime.getRuntime().exec("ps -x"); BufferedReader input = new BufferedReader(new In

我使用一些代码行通过检查计算机上正在运行的进程来检查特定软件程序是否正在计算机上运行。完整代码为:

public static void main(String[] args) {
    try {
        String line;
        Process p = Runtime.getRuntime().exec("ps -x");
        BufferedReader input =
                new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = input.readLine()) != null) {
                System.out.println(line);
                if(line.contains("/xyz/")) System.out.println("Found it!");
        }
        input.close();
    } 
    catch (Exception err) {
          err.printStackTrace();
    }
    System.exit(0);
}
当使用Netbeans 8.2运行这些行时,我会得到一长串正在运行的进程(总共大约90个进程)。我正在寻找的过程被找到了。然后,当我使用Netbeans 11.1运行相同的代码时,我只得到几个进程(只有6个进程),并且找不到我要查找的进程。我电脑的操作系统是Ubuntu。Netbeans 8.2和11.1都是以默认方式安装的,我没有做任何修改。两次运行都是作为计算机上的同一用户完成的

为什么Netbeans 8.2和11.1在行为上存在差异?要让Netbeans 11.1在我的计算机上获得所有正在运行的进程,我可以做些什么

编辑1:根据评论中的建议,我已经验证了从Netbeans内部以及从命令行运行该程序。 Netbeans 8.2和11.1都指示运行相同的命令行:

java -jar "/home/joe/NetBeansProjects/Sandbox/dist/Sandbox.jar"
这与我在Netbeans 8.2中运行程序时得到的结果相同。我从Netbeans 11.1获得的结果与所有其他结果不同(我得到的输出要少得多)

编辑3:这里是从Netbeans 11.1中的我的程序或GNOME终端运行
ps-x
的结果。这是两天后完成的,运行进程的数量与我发布原始问题时略有不同

Netbeans 11.1中ps-x的结果:

  PID TTY      STAT   TIME COMMAND
    1 tty2     S+     0:00 /usr/libexec/flatpak-bwrap --args 34 netbeans-desktop
  190 tty2     Sl+    1:41 /app/jdk/bin/java <long command string>
  367 tty2     R+     0:00 ps -x
Product Version: Apache NetBeans IDE 11.1
Java: 11.0.2; OpenJDK 64-Bit Server VM 11.0.2+9
Runtime: OpenJDK Runtime Environment 11.0.2+9
System: Windows 10 version 10.0 running on amd64; Cp1252; en_US (nb)
User directory: C:\Users\johndoe\AppData\Roaming\NetBeans\11.1
Cache directory: C:\Users\johndoe\AppData\Local\NetBeans\Cache\11.1
(发现88个进程)

我观察到的差异: (a) Netbeans 11.1仅显示与tty2相关的进程。 (b) Netbeans 11.1不显示属于tty2的所有进程,只显示一个子集。 (c) 是否Netbeans 11.1只显示与自身相关的进程,而不是计算机上运行的所有进程

编辑2:这是我在每个Netbeans版本中运行有关的帮助>时得到的信息:

Product Version: NetBeans IDE 8.2 (Build 201705191307)
Updates: NetBeans IDE is updated to version NetBeans 8.2 Patch 2
Java: 1.8.0_131; Java HotSpot(TM) 64-Bit Server VM 25.131-b11
Runtime: Java(TM) SE Runtime Environment 1.8.0_131-b11
System: Linux version 5.0.0-27-generic running on amd64; UTF-8; en_US (nb)
User directory: /home/joe/.netbeans/8.2
Cache directory: /home/joe/.cache/netbeans/8.2

我注意到Java版本是不同的。我不知道这是否是导致
运行时.getRuntime().exec()
命令中出现不同结果的原因。

这不是一个解决方案,而是请求提供更多不适合注释的信息

[1] 使用NetBeans 8.2和NetBeans 11.1的“帮助>关于”窗口的输出更新您的问题。例如,在我的机器上,这是我为NetBeans 11.1所得到的:

  PID TTY      STAT   TIME COMMAND
    1 tty2     S+     0:00 /usr/libexec/flatpak-bwrap --args 34 netbeans-desktop
  190 tty2     Sl+    1:41 /app/jdk/bin/java <long command string>
  367 tty2     R+     0:00 ps -x
Product Version: Apache NetBeans IDE 11.1
Java: 11.0.2; OpenJDK 64-Bit Server VM 11.0.2+9
Runtime: OpenJDK Runtime Environment 11.0.2+9
System: Windows 10 version 10.0 running on amd64; Cp1252; en_US (nb)
User directory: C:\Users\johndoe\AppData\Roaming\NetBeans\11.1
Cache directory: C:\Users\johndoe\AppData\Local\NetBeans\Cache\11.1
[2] 构建应用程序,并将输出窗口中显示的命令复制到剪贴板,指定如何从命令行运行该命令。它看起来与此类似:

要在不使用Ant的情况下从命令行运行此应用程序,请尝试:

C:\Java\openJDK\jdk-12.0.2/bin/Java-cp D:\NB111\formattributes\dist\formattributes.jar formatproperties.formatproperties

将该命令粘贴到终端窗口中,并对两个版本(NetBeans 8.2和NetBeans 11.1)运行该命令。会发生什么

[3] 使用在NetBeans 11.1中运行应用程序时产生的
ps-x
输出以及终端窗口更新您的问题

您的问题可能有三个原因:

  • 与NetBeans 11.1一起使用的Java版本。显然,如果您在两个NetBeans安装中使用相同的版本,那么这与此无关
  • NetBeans 11.1本身
  • 与安装NetBeans 11.1相关的一些环境问题
上述三个步骤将有助于隔离问题


更新:

根据OP关于多个Java安装的反馈,下一步要尝试的是使用NetBeans 11.1中的Java 1.8构建和运行应用程序。执行此操作需要两个步骤:

  • 将Java 1.8作为Java平台添加到NetBeans 11.1(如有必要)
  • 重建应用程序并使用Java1.8运行它
  • 要在NetBeans 11.1中做到这一点:

      PID TTY      STAT   TIME COMMAND
        1 tty2     S+     0:00 /usr/libexec/flatpak-bwrap --args 34 netbeans-desktop
      190 tty2     Sl+    1:41 /app/jdk/bin/java <long command string>
      367 tty2     R+     0:00 ps -x
    
    Product Version: Apache NetBeans IDE 11.1
    Java: 11.0.2; OpenJDK 64-Bit Server VM 11.0.2+9
    Runtime: OpenJDK Runtime Environment 11.0.2+9
    System: Windows 10 version 10.0 running on amd64; Cp1252; en_US (nb)
    User directory: C:\Users\johndoe\AppData\Roaming\NetBeans\11.1
    Cache directory: C:\Users\johndoe\AppData\Local\NetBeans\Cache\11.1
    
    • 选择工具>Java平台,然后单击添加平台按钮(如果Java 1.8还不是平台)
    • 选择平台类型Java Standard Edition,然后单击下一步
    • 选择平台文件夹屏幕上,导航到java 1.8安装的根目录。在我的例子中,它是C:\Java\jdk1.8.0\u 221,但显然您的路径会有所不同
    • 完成向导以将Java 1.8添加为Java平台,然后单击关闭按钮关闭Java平台管理器窗口
    • 项目窗格中选择您的项目,右键单击并从关联菜单中选择属性
    • 源代码>源代码二进制格式设置为JDK 8
    • 库>Java平台设置为Java 1.8(或您先前为Java 1.8选择的任何平台名称),然后单击确定关闭项目属性窗口
    • 选择您的项目,右键单击并选择“清理并生成”,以使用Java 1.8重建它
    • 选择您的项目,右键单击并选择运行,以使用Java 1.8在NetBeans 11.1中运行您的应用程序。使用Java11有什么变化吗
    仅粘贴部分代码不足以解决此问题。这确实需要一个答案,因此请相应地更新您的问题。整个程序应该只有几行长。另外:[1]两个截图对比不同的输出可能会有所帮助。[2] 用以下信息更新您的问题:(a)您用于在NetBeans 8.2上构建和运行代码的Java版本。(b) 用于在NetBeans 11.1上构建和运行代码的Java版本。两个版本的NetBeans安装方式是否相同?他们都是以同一个用户的身份运行吗?@skomisa:我已经扩展了