8

这与另一个用户的较早问题有关,询问如何检测代码在 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. 有什么办法可以查出它是使用javaor启动的javaw吗?
  2. 为什么 Eclipse 使用javaw启动程序?
4

3 回答 3

6

System.console()将返回,因为 using和null之间的唯一区别是 for ,没有关联的控制台窗口。javajavawjavaw

这是一个小型测试程序,您可以使用它来演示:

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 选项卡中,如果将 Runtime JRE 更改为Alternate JRE,则可以将 Java 可执行文件从 更改javawjava

于 2010-03-18T10:46:24.980 回答
4

检查System.console()对我不起作用,因为:

  1. 它需要 JDK 6 或更高版本
  2. 如果应用程序是通过Runtime.exec(String)方法运行的,控制台对象也会丢失。这对我来说很重要,因为我们使用了很多自动化脚本。

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

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。

于 2012-12-10T15:41:42.790 回答
1

有什么方法可以确定它是使用 java 还是 javaw 启动的?

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

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

  1. 要从 javaw 更改为 java:

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

于 2010-03-18T11:24:34.737 回答