Unterschied zwischen "Java", "Javawv" und "Javaws"

184

Was ist der Unterschied zwischen java, javawund javaws?

Ich fand unter Windows, dass der größte Teil von Java verwendet wird javaw.

user705414
quelle
2
Das liegt daran, dass Windows die lästige Angewohnheit hat, ein tatsächliches Terminal (das nicht einmal als "Terminal" bezeichnet werden sollte ...) im Vordergrund zu starten, wenn Sie ein Programm mit starten java -cp .... Da fast niemand das will, javawist die Wahl, dieses nervige Fenster verschwinden zu lassen.
Matthieu

Antworten:

212

Siehe Dokumentation für:

  • javaBefehl 1 / javawBefehl 2
    1. Das javaTool startet eine Java-Anwendung. Dazu wird eine Java-Laufzeitumgebung gestartet, eine angegebene Klasse geladen und die mainMethode dieser Klasse aufgerufen.
    2. Der javawBefehl ist identisch mit java, außer dass javawkein Konsolenfenster zugeordnet ist. Verwenden javawSie diese Option, wenn kein Eingabeaufforderungsfenster angezeigt werden soll.
  • javawsBefehl , der " Java Web Start Befehl"

    Der javawsBefehl startet Java Web Start, die Referenzimplementierung des Java Network Launching Protocol (JNLP). Java Web Start startet Java-Anwendungen / Applets, die in einem Netzwerk gehostet werden.

    Wenn eine JNLP-Datei angegeben ist, javawswird die in der JNLP-Datei angegebene Java-Anwendung / das angegebene Applet gestartet.

    Der javawsLauncher verfügt über eine Reihe von Optionen, die in der aktuellen Version unterstützt werden. Die Optionen werden jedoch möglicherweise in einer zukünftigen Version entfernt.

    Siehe auch JDK 9-Versionshinweise Veraltete APIs, Funktionen und Optionen :

    Java-Bereitstellungstechnologien sind veraltet und werden in einer zukünftigen Version entfernt.
    Java Applet- und WebStart-Funktionen, einschließlich der Applet-API, des Java-Plug-Ins, des Java Applet Viewer, von JNLP und Java Web Start, einschließlich des javawsTools , sind in JDK veraltet 9 und wird in einer zukünftigen Version entfernt.

Andrew Thompson
quelle
69

Java: Java Application Executor, der einer Konsole zugeordnet ist, um Ausgaben / Fehler anzuzeigen

javaw: ( Java-Fenster ) Anwendungs-Executor, der nicht mit der Konsole verknüpft ist. Also keine Anzeige von Ausgabe / Fehlern. Es kann verwendet werden, um die Ausgabe / Fehler stillschweigend in Textdateien zu übertragen. Es wird hauptsächlich zum Starten von GUI-basierten Anwendungen verwendet.

javaws: ( Java- Webstart ) zum Herunterladen und Ausführen der verteilten Webanwendungen. Auch hier ist keine Konsole zugeordnet.

Alle sind Teil von JRE und verwenden dieselbe JVM.

Venkataswamy
quelle
Also, wenn ich JRE installiert habe, javawsollte in meinem Pfad sein? (Ist es nicht)
Endolith
@endolith, Java-Installation unter Windows fügt meiner Erfahrung nach der PATH-Variablen nichts hinzu. Wenn Sie nur JRE installiert haben, müssen Sie das Verzeichnis JRE / bin wahrscheinlich manuell zu PATH hinzufügen. Wenn Sie JRE und JDK installiert haben, fügen Sie stattdessen das JDK / bin zu PATH hinzu.
Mcduffee
9

java.exe ist der Konsole zugeordnet, während javaw.exe keine solche Zuordnung hat. Wenn java.exe ausgeführt wird, wird automatisch ein Eingabeaufforderungsfenster geöffnet, in dem Ausgabe- und Fehlerströme angezeigt werden.

Serge Bekenkamp
quelle
6

Von http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=%2Fcom.ibm.java.doc.user.aix32.60%2Fuser%2Fjava.html :

Der Befehl javaw ist identisch mit Java, außer dass javaw kein Konsolenfenster zugeordnet ist. Verwenden Sie javaw, wenn kein Eingabeaufforderungsfenster angezeigt werden soll. Der Javaw Launcher zeigt ein Fenster mit Fehlerinformationen an, wenn dies fehlschlägt.

Und javaws ist für Java-Webstartanwendungen, Applets oder ähnliches, würde ich vermuten.

lfxgroove
quelle
Der Link ist defekt: "Die angeforderte Seite existiert nicht oder wurde möglicherweise verschoben."
Peter Mortensen
1

Ich habe überprüft, ob die Ausgabeumleitung funktioniert mit javaw:

javaw -cp ... mypath.MyClass ... arguments 1>log.txt 2>err.txt

Wenn die Java-Anwendung etwas über System.out oder System.err druckt, wird dies in diese Dateien geschrieben, ebenso wie bei Verwendung von Java (ohne w). Insbesondere beim Starten javakann die JRE Startfehler (Klasse nicht gefunden) in die Fehlerausgabepipe schreiben. In diesem Zusammenhang ist es wichtig, über Fehler Bescheid zu wissen. Ich empfehle auf jeden Fall die Konsolenumleitung, wenn sie javawaufgerufen wird.

Im Gegenteil, wenn Sie verwenden

start java .... 1>log.txt 2>err.txt

Mit dem Windows-Konsolenbefehl startfunktioniert die Konsolenausgabeumleitung weder mit javanoch mit javaw.

Erklärung, warum es so ist: Ich denke, das javawöffnet einen internen Prozess im Betriebssystem (angemessen unter Verwendung der Klasse java.lang.Process) und überträgt eine bekannte Ausgabeverleitung an diesen Prozess. Wenn in der Befehlszeile keine Umleitung angegeben wird, wird nichts umgeleitet, und der intern gestartete Prozess für javawhat keine Konsolenausgaben. Das Verhalten für java.lang.Process ist ähnlich. Die virtuelle Maschine kann diese interne Funktion auch für verwenden javaw.

Wenn Sie 'start' verwenden, erstellt die Windows-Konsole einen neuen Prozess für Windows, um den Befehl nach dem Start auszuführen. Dieser Mechanismus verwendet jedoch leider keine bestimmte Umleitung für den gestarteten Unterprozess.

Hartmut Schorrig
quelle