【问题标题】:getRuntime() results depends on Netbeans versiongetRuntime() 结果取决于 Netbeans 版本
【发布时间】:2019-09-08 15:41:18
【问题描述】:

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

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:根据 cmets 中的建议,我已验证从 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 的结果。这是两天后做的,运行的进程数和我发原始问题的时候略有不同。

ps -x 在 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

(找到 3 个进程)

ps -x 在 GNOME 终端中的结果(注意命令被截断)

  PID TTY      STAT   TIME COMMAND
 2075 ?        Ss     0:00 /lib/systemd/systemd --user
 2076 ?        S      0:00 (sd-pam)
 2092 ?        Sl     0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
 2096 tty2     Ssl+   0:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SH
 2102 ?        Ss     0:00 /usr/bin/dbus-daemon --session --address=systemd: --n
 2109 tty2     Sl+    0:00 /usr/lib/gnome-session/gnome-session-binary --session
 2209 ?        Ss     0:00 /usr/bin/ssh-agent /usr/bin/im-launch env GNOME_SHELL
 2211 ?        Ssl    0:00 /usr/lib/at-spi2-core/at-spi-bus-launcher
 2216 ?        S      0:00 /usr/bin/dbus-daemon --config-file=/usr/share/default
 2218 ?        Sl     0:00 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-s
 2232 ?        Ssl    0:00 /usr/lib/gvfs/gvfsd
 2237 ?        Sl     0:00 /usr/lib/gvfs/gvfsd-fuse /run/user/1000/gvfs -f -o bi
 2255 tty2     Sl+    0:27 /usr/bin/gnome-shell
 2265 ?        S<l    0:00 /usr/bin/pulseaudio --start --log-target=syslog
 2269 ?        S      0:00 /usr/lib/x86_64-linux-gnu/pulse/gconf-helper
 2271 ?        S      0:00 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2
 2281 tty2     Sl     0:00 ibus-daemon --xim --panel disable
 2285 tty2     Sl     0:00 /usr/lib/ibus/ibus-dconf
 2289 tty2     Sl     0:00 /usr/lib/ibus/ibus-x11 --kill-daemon
 2292 ?        Sl     0:00 /usr/lib/ibus/ibus-portal
 2297 ?        Ssl    0:00 /usr/lib/xdg-desktop-portal/xdg-permission-store
 2304 ?        Sl     0:00 /usr/lib/gnome-shell/gnome-shell-calendar-server
 2308 ?        Ssl    0:00 /usr/lib/evolution/evolution-source-registry
 2316 ?        SLl    0:00 /usr/lib/gnome-online-accounts/goa-daemon
 2330 ?        Sl     0:00 /usr/lib/gnome-online-accounts/goa-identity-service
 2335 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-udisks2-volume-monitor
 2342 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-afc-volume-monitor
 2347 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-mtp-volume-monitor
 2351 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
 2355 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-goa-volume-monitor
 2365 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-power
 2366 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-print-notification
 2369 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-rfkill
 2372 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-screensaver-proxy
 2374 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-sharing
 2382 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-sound
 2385 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-xsettings
 2389 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-wacom
 2390 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-smartcard
 2395 tty2     Sl+    0:02 /usr/bin/gjs /home/joe/.local/share/gnome-shell/ex
 2396 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-a11y-settings
 2400 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-color
 2404 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-clipboard
 2408 ?        Sl     0:00 /usr/lib/dconf/dconf-service
 2409 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-housekeeping
 2412 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-datetime
 2416 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-media-keys
 2421 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-keyboard
 2436 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-mouse
 2467 tty2     Sl+    0:00 /usr/lib/gnome-settings-daemon/gsd-printer
 2472 tty2     Sl+    0:00 /usr/lib/gnome-disk-utility/gsd-disk-utility-notify
 2483 tty2     Sl+    0:02 nautilus-desktop
 2484 tty2     Sl+    0:00 /usr/lib/x86_64-linux-gnu/indicator-messages/indicato
 2489 tty2     Sl+    0:00 python3 /usr/lib/gnome-tweak-tool/gnome-tweak-tool-li
 2528 ?        Sl     0:00 /usr/lib/gvfs/gvfsd-trash --spawner :1.22 /org/gtk/gv
 2535 ?        Ssl    0:08 /home/joe/.dropbox-dist/dropbox-lnx.x86_64-80.4.12
 2537 ?        Ssl    0:00 /usr/lib/evolution/evolution-calendar-factory
 2561 ?        Sl     0:00 /usr/lib/evolution/evolution-calendar-factory-subproc
 2567 tty2     Sl     0:00 /usr/lib/ibus/ibus-engine-simple
 2575 ?        Ssl    0:00 /usr/lib/evolution/evolution-addressbook-factory
 2592 ?        Sl     0:00 /usr/lib/evolution/evolution-addressbook-factory-subp
 2851 ?        Ssl    0:00 /usr/lib/gvfs/gvfsd-metadata
 3054 tty2     Sl+    0:00 telepathy-indicator
 3060 ?        Ssl    0:00 /usr/lib/telepathy/mission-control-5
 3078 tty2     Sl+    0:00 zeitgeist-datahub
 3089 ?        Ssl    0:00 /usr/bin/zeitgeist-daemon
 3096 ?        Ssl    0:00 /usr/lib/zeitgeist/zeitgeist/zeitgeist-fts
 3137 tty2     Sl     0:00 python3 /usr/share/ibus-anthy/engine/main.py --ibus
 3216 tty2     SLl+   0:03 /usr/bin/gnome-software --gapplication-service
 3398 tty2     Sl+    0:08 /usr/lib/thunderbird/thunderbird
 3532 tty2     S+     0:00 /usr/libexec/flatpak-bwrap --args 34 netbeans-desktop
 3537 ?        Ssl    0:00 /usr/libexec/flatpak-session-helper
 3542 ?        Ssl    0:00 /usr/lib/xdg-desktop-portal/xdg-document-portal
 3552 tty2     S+     0:00 /usr/libexec/flatpak-bwrap --args 34 /usr/libexec/fla
 3553 tty2     Sl+    0:00 /usr/libexec/flatpak-dbus-proxy --args=36
 3555 tty2     S+     0:00 /usr/libexec/flatpak-bwrap --args 34 netbeans-desktop
 3556 tty2     S+     0:00 /bin/bash /app/netbeans/platform/lib/nbexec --userdir
 3745 tty2     Sl+    1:48 /app/jdk/bin/java -Djdk.home=/app/jdk -classpath /app
 4149 tty2     Sl+    0:16 /usr/lib/firefox/firefox -new-window
 4209 tty2     Sl+    0:17 /usr/lib/firefox/firefox -contentproc -childID 1 -isF
 4252 tty2     Sl+    0:13 /usr/lib/firefox/firefox -contentproc -childID 2 -isF
 4350 tty2     Sl+    0:00 /usr/bin/python3 /usr/bin/chrome-gnome-shell /usr/lib
 5226 tty2     Sl+    0:00 /usr/lib/firefox/firefox -contentproc -childID 4 -isF
 5513 tty2     Sl+    0:00 gedit /home/joe/Desktop/Empty Document
 5700 ?        Ssl    0:00 /usr/lib/gnome-terminal/gnome-terminal-server
 5709 pts/0    Ss     0:00 bash
 5731 pts/0    R+     0:00 ps -x

(找到 88 个进程)

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

编辑 2:这是我在每个 Netbeans 版本中运行 Help > About 时得到的信息:

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
Product Version: Apache NetBeans IDE 11.1
Java: 11.0.4; OpenJDK 64-Bit Server VM 11.0.4+11
Runtime: OpenJDK Runtime Environment 11.0.4+11
System: Linux version 5.0.0-27-generic running on amd64; UTF-8; en_US (nb)
User directory: /home/joe/.netbeans/11.1
Cache directory: /home/joe/.cache/netbeans/11.1

我注意到 Java 版本不同。我不知道这是否会导致 Runtime.getRuntime().exec() 命令中的结果不同。

【问题讨论】:

  • 仅粘贴部分代码不足以解决此问题。它确实需要Minimal, Reproducible Example,因此请相应地更新您的问题。整个程序应该只有几行。另外:[1] 对比不同输出的几个屏幕截图可能会有所帮助。 [2] 使用以下信息更新您的问题:(a) 您用于在 NetBeans 8.2 上构建和运行代码的 Java 版本。 (b) 您用于在 NetBeans 11.1 上构建和运行代码的 Java 版本。
  • 两个版本的 NetBeans 安装方式是否相同?它们是否都以同一用户身份运行?
  • @skomisa :我已将代码扩展为我用于本次调查的完整代码。
  • @VGR :两个版本的 Netbeans 都以默认方式安装。我没有对他们的设置进行任何修改。我以同一用户身份运行程序。
  • @user207421 这很重要,因为问题可能是由于使用的 Java 版本而不是使用的 NetBeans 版本。我承认这不太可能,但使用较新版本的 NetBeans 似乎也不太可能是原因。也许有一些与安装较新版本的 NetBeans 相关的权限问题?

标签: java netbeans


【解决方案1】:

这不是解决方案,而是要求提供不适合 cmets 的更多信息。

[1] 对于 NetBeans 8.2 和 NetBeans 11.1,使用 Help > About 窗口的输出更新您的问题。例如,在我的机器上,这是我为 NetBeans 11.1 获得的:

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\FormatProperties\dist\FormatProperties.jar 格式属性.格式属性

将该命令粘贴到 Terminal 窗口并运行它,用于两个版本(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 构建和运行应用程序。这样做是一个两步过程:

  1. 将 Java 1.8 作为 Java 平台添加到 NetBeans 11.1(如有必要)。
  2. 重建应用程序并使用 Java 1.8 运行它。

在 NetBeans 11.1 中执行此操作:

  • 选择Tools > Java Platforms,然后点击Add Platform...按钮(如果Java 1.8还不是一个平台)。
  • 选择平台类型Java Standard Edition并点击下一步>
  • 选择平台文件夹 屏幕上导航到 java 1.8 安装的根目录。在我的情况下,它是 C:\Java\jdk1.8.0_221,但显然你的路径会有所不同。
  • 完成向导以将 Java 1.8 添加为 Java 平台,然后单击 关闭 按钮关闭 Java 平台管理器 窗口。
  • Projects 窗格中选择您的项目,右键单击并从上下文菜单中选择 Properties
  • Source > Source Binary Format设置为JDK 8
  • Libraries > Java Platform 设置为 Java 1.8(或您之前为 Java 1.8 选择的任何 Platform Name),然后点击 确定关闭项目属性窗口。
  • 选择您的项目,右键单击并选择Clean and Build 以使用 Java 1.8 重新构建它。
  • 选择您的项目,右键单击并选择运行,以使用 Java 1.8 在 NetBeans 11.1 中运行您的应用程序。使用 Java 11 有什么变化吗?

【讨论】:

  • 首先,我要感谢您在过去几天中的持续帮助。我不熟悉 Netbeans 等这些 IDE 工具,因此必须了解如何调查为什么使用不同版本的工具会得到不同的结果。我了解您在项目符号列表中提到的三个潜在原因。我将使用您要求的信息更新原始问题。再次感谢!
  • [1] 我在原始问题中添加了 Help > About 信息。显然使用了两个不同的 Java 版本。我不知道这两个版本对getRuntime().exec() 命令的处理是否不同。 [2] 此命令行已包含在原始问题中。两个 Netbeans 版本都提供了相同的命令来使用。此命令行不包含有关要使用哪个 Java 版本的线索。
  • [3] 我在原始问题中包含了ps -x 在 Netbeans 11.1 和 GNOME 终端中运行程序的输出。会不会是 Netbeans 11.1 只显示与自身相关的进程,而不是所有进程?我不知道 Netbeans 11.1 是否有可以强制执行此操作的设置。
  • @Joe [[1] 我更新了答案以描述如何使用 Java 8 在 NetBeans 11.1 中构建和运行您的应用程序。您可以试试吗? [2] 在终端窗口提交java -version时显示的是什么版本的Java?
  • 感谢您提供添加 Java 平台的过程。现在我遇到了下一个障碍:Netbeans 11.1 不允许我选择与 Netbeans 8.2 相同的目录。所需平台位于目录usr/lib/jvm/jdk1.8.0_131 中。但是,Netbeans 11.1 不显示文件夹 jvm(显然 Netbeans 8.2 会显示)。我将尝试一下文件夹设置,看看是否可以让它变得可见。
猜你喜欢
  • 1970-01-01
  • 2013-11-02
  • 2015-07-11
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
相关资源
最近更新 更多