这与其他用户的早期问题有关,询问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
启动的。
java
还是javaw
推出的?javaw
启动程序?答案 0 :(得分:6)
System.console()将返回null
,因为使用java
和javaw
的唯一区别在于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()对我不起作用,因为:
所以我使用以下解决方案:
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启动程序?
要从javaw更改为java:
我认为因为eclipse开发人员开发了GUI应用程序而且他们不需要控制台窗口。