我可以找出java程序是使用java还是javaw启动的
这与其他用户的早期问题有关,询问如何检测代码是否在eclipse IDE中运行 。
我注意到Eclipse总是使用javaw
而不是java
来启动程序。 (这并不意味着用Eclipse启动了一个用Eclipse启动的程序)。
我可以找到使用的参数
RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean(); List lst = RuntimemxBean.getInputArguments(); for (int i = 0; i < lst.size(); i++) System.out.println(lst.get(i));
但这并没有告诉我它是使用java
还是javaw
启动的。
- 有没有办法找出它是使用
java
还是javaw
启动的? - 为什么Eclipse使用
javaw
来启动程序?
System.console()将返回null
,因为使用java
和javaw
的唯一区别是对于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中运行时,即使以java
启动, System.console()
仍将返回null
。
在Eclipse的启动配置,JRE选项卡中,如果将Runtime JRE更改为Alternate JRE ,则可以将Java可执行文件从javaw
更改为java
。
检查System.console()对我没有用,因为:
- 它需要JDK 6或更高版本
- 如果应用程序通过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。
有没有办法找出它是使用java还是javaw启动的?
根据文档 :javaw命令与java相同,但javaw没有关联的控制台窗口。 当您不希望出现命令提示符窗口时,请使用javaw。 但是,如果由于某种原因启动失败,则javaw启动程序将显示一个包含错误信息的对话框。
为什么eclipse使用javaw来启动程序?
-
要从javaw更改为java:
- 从菜单栏中选择“运行” – >“运行…”打开启动配置。
- 选择应用程序的启动配置。
- 切换到’JRE’页面。
- 取消选择“使用默认Java可执行文件”
- 输入’java’代替’javaw’。
-
我认为,因为eclipse开发人员开发GUI应用程序,他们不需要控制台窗口。