我可以找出java程序是使用java还是javaw启动的

时间:2010-03-18 10:34:21

标签: java eclipse javaw

这与其他用户的早期问题有关,询问How to detect that code is running inside eclipse IDE

我注意到Eclipse始终使用javaw而不是java启动程序。 (这并不意味着从Eclipse启动了javaw启动的程序。)

我可以找到使用

传递的参数
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启动程序?

3 个答案:

答案 0 :(得分:6)

System.console()将返回null,因为使用javajavaw的唯一区别在于javaw,因此没有关联的控制台窗口。< / p>

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

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可执行文件从javaw更改为java

答案 1 :(得分:4)

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

  1. 需要JDK 6或更高版本
  2. 如果应用程序是通过Runtime.exec(String)方法运行的,那么控制台对象也会丢失。这对我来说很关键,因为我们使用了很多自动脚本。
  3. 所以我使用以下解决方案:

    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。

答案 2 :(得分:1)

  

有没有办法找出它是使用java还是javaw启动的?

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

  

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

  1. 要从javaw更改为java:

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