我可以查出java程序是使用java还是javaw启动的吗
题
这与另一个用户之前提出的问题有关,询问 如何检测代码正在 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
.
- 有什么办法可以查出它是否是使用启动的
java
或者javaw
? - 为什么使用Eclipse
javaw
启动程序?
解决方案
系统.控制台() 将返回 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 中运行时, System.console()
仍然会回来 null
, ,即使开始时 java
.
在 Eclipse 的启动配置中,JRE 选项卡中,如果将运行时 JRE 更改为 备用 JRE, ,然后您可以更改 Java 可执行文件 javaw
到 java
.
其他提示
检查 系统.控制台() 不适合我,因为:
- 需要 JDK 6 或更高版本
- 如果应用程序通过以下方式运行,控制台对象也会丢失 运行时.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来启动程序?
要从 javaw 更改为 java:
- 从菜单栏中选择“运行” - >“运行...”,打开启动配置。
- 选择您的应用程序的启动配置。
- 切换到“JRE”页面。
- 取消选择“使用默认 Java 可执行文件”
- 输入“java”代替“javaw”。
我认为因为 eclipse 开发人员开发 GUI 应用程序,他们不需要控制台窗口。
不隶属于 StackOverflow