This is related to an earlier question by a different user, asking How to detect that code is running inside eclipse IDE.
I noticed that Eclipse always launches programs with javaw
rather than java
. (This does not imply a program launched with javaw
was launched from Eclipse).
I can find the arguments passed using
RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> lst = RuntimemxBean.getInputArguments();
for (int i = 0; i < lst.size(); i++)
System.out.println(lst.get(i));
But this does not tell me whether it was launched using java
or javaw
.
java
or javaw
?javaw
to launch programs?System.console() will return null
, since the only difference between using java
and javaw
is that for javaw
, there is no associated console window.
Here's a small test program you can use to demonstrate that:
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");
}
}
}
However, when running from within Eclipse, System.console()
will still return null
, even when started with java
.
In Eclipse's launch configuration, JRE tab, if you change the Runtime JRE to Alternate JRE, you can then change the Java executable from javaw
to java
.
Checking for System.console() didn't work for me, because of:
So I'm using following solution:
private static boolean isJavaw() {
try {
System.in.available();
return false;
} catch (IOException e) {
// invalid handle in case of javaw
return true;
}
}
Works fine with JDKs 5, 6 and 7.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With