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.

  1. Gibt es eine Möglichkeit, es herauszufinden, ob es mithilfe des Starts gestartet wurde java oder javaw?
  2. Warum verwendet Eclipse javaw Programme starten?
War es hilfreich?

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:

  1. Es erfordert JDK 6 oder später
  2. 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?

  1. Von Javaw nach Java wechseln:

    1. Öffnen Sie Ihre Startkonfiguration, indem Sie 'Run'-> 'Run ...' in der Menüleiste auswählen.
    2. Wählen Sie die Startkonfiguration Ihrer Anwendung aus.
    3. Wechseln Sie zur Seite "JRE".
    4. Deaktivieren "Verwenden Sie Standard -Java -ausführbare Datei"
    5. Geben Sie 'Java' anstelle von 'Javaw' ein.
  2. Ich denke, weil Eclipse -Entwickler GUI -Anwendungen entwickeln und kein Konsolenfenster benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top