Kann ich herausfinden, ob das Java -Programm mit Java oder Javaw gestartet wurde
Frage
Dies bezieht sich auf eine frühere Frage eines anderen Benutzer So erkennen Sie, dass der Code in Eclipse IDE ausgeführt wird.
Mir ist aufgefallen, dass Eclipse immer Programme mit dem Start von Programmen mit javaw
statt java
. (Dies bedeutet nicht, dass ein Programm mit gestartet wird javaw
wurde aus Eclipse gestartet).
Ich kann die Argumente finden, die übergeben werden
RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> lst = RuntimemxBean.getInputArguments();
for (int i = 0; i < lst.size(); i++)
System.out.println(lst.get(i));
Dies sagt mir jedoch nicht, ob es mithilfe von Verwendung gestartet wurde java
oder javaw
.
- Gibt es eine Möglichkeit, es herauszufinden, ob es mithilfe des Starts gestartet wurde
java
oderjavaw
? - Warum verwendet Eclipse
javaw
Programme starten?
Lösung
System.Console () wird zurückkehren null
, da der einzige Unterschied zwischen der Verwendung java
und javaw
ist das für javaw
, Es gibt kein Konsolenfenster.
Hier ist ein kleines Testprogramm, mit dem Sie nachweisen können:
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");
}
}
}
Wenn Sie jedoch von innerhalb der Sonnenfinsternis laufen, System.console()
wird immer noch zurückkehren null
, auch als mit begonnen mit java
.
In der Startkonfiguration von Eclipse, der Registerkarte JRE, wenn Sie die Laufzeit -JRE an ändern Alternative JRE, Sie können dann die ausführbare Java -Datei ändern javaw
zu java
.
Andere Tipps
Überprüfung auf System.Console () hat bei mir nicht funktioniert, wegen:
- Es erfordert JDK 6 oder später
- Das Konsolenobjekt fehlt ebenfalls, wenn die Anwendung durch die ausgeführt wurde Runtime.exec (String) Methode. Dies war für mich von entscheidender Bedeutung, da wir viele automatisierte Skript verwenden.
Ich verwende also die folgende Lösung:
private static boolean isJavaw() {
try {
System.in.available();
return false;
} catch (IOException e) {
// invalid handle in case of javaw
return true;
}
}
Funktioniert gut mit JDKs 5, 6 und 7.
Gibt es eine Möglichkeit, herauszufinden, ob es mit Java oder Javaw gestartet wurde?
Laut dem Dokumentation: Der Befehl javaw ist identisch mit Java, außer dass es bei Javaw kein Fenster des Konsolenfensters gibt. Verwenden Sie Javaw, wenn Sie nicht möchten, dass ein Eingabeaufforderungfenster angezeigt wird. Der Javaw Launcher zeigt jedoch ein Dialogfeld mit Fehlerinformationen an, wenn ein Start aus irgendeinem Grund fehlschlägt.
Warum verwendet Eclipse Javaw, um Programme zu starten?
Von Javaw nach Java wechseln:
- Öffnen Sie Ihre Startkonfiguration, indem Sie 'Run'-> 'Run ...' in der Menüleiste auswählen.
- Wählen Sie die Startkonfiguration Ihrer Anwendung aus.
- Wechseln Sie zur Seite "JRE".
- Deaktivieren "Verwenden Sie Standard -Java -ausführbare Datei"
- Geben Sie 'Java' anstelle von 'Javaw' ein.
Ich denke, weil Eclipse -Entwickler GUI -Anwendungen entwickeln und kein Konsolenfenster benötigen.