这与另一个用户之前提出的问题有关,询问 如何检测代码正在 eclipse IDE 中运行.

我注意到 Eclipse 总是启动程序 javaw 而不是 java. 。(这并不意味着启动的程序 javaw 是从 Eclipse 启动的)。

我可以找到使用传递的参数

RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> lst = RuntimemxBean.getInputArguments();
for (int i = 0; i < lst.size(); i++)
    System.out.println(lst.get(i));

但这并没有告诉我它是否是使用启动的 java 或者 javaw.

  1. 有什么办法可以查出它是否是使用启动的 java 或者 javaw?
  2. 为什么使用Eclipse javaw 启动程序?
有帮助吗?

解决方案

系统.控制台() 将返回 null, ,因为使用之间的唯一区别 javajavaw 那是为了 javaw, ,没有关联的控制台窗口。

您可以使用以下一个小测试程序来证明这一点:

import javax.swing.JOptionPane;
public class ConsoleTest {
    public static void main(String[] args) {
        if (System.console() == null) {
            JOptionPane.showMessageDialog(null, "System.console() is null");
        } else {
           JOptionPane.showMessageDialog(null, "System.console() is not null");
        }
    }
}

然而,当从 Eclipse 中运行时, System.console() 仍然会回来 null, ,即使开始时 java.

在 Eclipse 的启动配置中,JRE 选项卡中,如果将运行时 JRE 更改为 备用 JRE, ,然后您可以更改 Java 可执行文件 javawjava.

其他提示

检查 系统.控制台() 不适合我,因为:

  1. 需要 JDK 6 或更高版本
  2. 如果应用程序通过以下方式运行,控制台对象也会丢失 运行时.exec(字符串) 方法。这对我来说至关重要,因为我们使用了大量自动化脚本。

所以我使用以下解决方案:

private static boolean isJavaw() {
  try {
    System.in.available();
    return false;
  } catch (IOException e) {
    // invalid handle in case of javaw
    return true;
  }
}

与 JDK 5、6 和 7 配合良好。

有什么方法可以查出它是使用java还是javaw启动的吗?

根据 文档:javaw 命令与 java 相同,只是 javaw 没有关联的控制台窗口。当您不希望出现命令提示符窗口时,请使用 javaw。但是,如果由于某种原因启动失败,javaw 启动器将显示一个包含错误信息的对话框。

为什么eclipse使用javaw来启动程序?

  1. 要从 javaw 更改为 java:

    1. 从菜单栏中选择“运行” - >“运行...”,打开启动配置。
    2. 选择您的应用程序的启动配置。
    3. 切换到“JRE”页面。
    4. 取消选择“使用默认 Java 可执行文件”
    5. 输入“java”代替“javaw”。
  2. 我认为因为 eclipse 开发人员开发 GUI 应用程序,他们不需要控制台窗口。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top