Różnica między „java”, „javawv i„ javaws ”


184

Jaka jest różnica między java, javawi javaws?

Odkryłem, że pod Windows większość Java jest uruchomiona javaw.


2
Dzieje się tak, ponieważ system Windows ma ten irytujący zwyczaj uruchamiania prawdziwego terminala (który nie powinien nawet być nazywany „terminalem” ...) na pierwszym planie za każdym razem, gdy uruchamiasz program java -cp .... Ponieważ prawie nikt tego nie chce, javawjest wybór, aby zniknęło to irytujące okno.
Matthieu,

Odpowiedzi:


212

Zobacz dokumentację dla:

  • javapolecenie 1 / javawpolecenie 2
    1. javaNarzędzie uruchamia aplikację Java. Robi to, uruchamiając środowisko wykonawcze Java, ładując określoną klasę i wywołując mainmetodę tej klasy .
    2. javawPolecenie jest identyczne java, z wyjątkiem tego ze javawnie ma skojarzonego oknie konsoli. Użyj, javawjeśli nie chcesz, aby pojawiło się okno wiersza polecenia.
  • javawsKomenda The " Java Web Start polecenie"

    Do javawsuruchamia polecenie Java Web Start, który jest wdrożenie odniesienia Java Network Launching Protocol (JNLP). Java Web Start uruchamia aplikacje / aplety Java hostowane w sieci.

    Jeśli określono plik JNLP, javawsuruchomi aplikację / aplet Java określony w pliku JNLP.

    Program javawsuruchamiający ma zestaw opcji obsługiwanych w bieżącej wersji. Jednak opcje mogą zostać usunięte w przyszłej wersji.

    Zobacz także Informacje o wersji JDK 9 Nieaktualne interfejsy API, funkcje i opcje :

    Technologie wdrażania Java są przestarzałe i zostaną usunięte w przyszłej wersji
    Funkcje apletów Java i WebStart, w tym interfejs API apletów, wtyczka Java, przeglądarka apletów Java, JNLP i Java Web Start, w tym javawsnarzędzie , są przestarzałe w JDK 9 i zostaną usunięte w przyszłej wersji.


69

java: moduł wykonawczy aplikacji Java, który jest powiązany z konsolą do wyświetlania danych wyjściowych / błędów

javaw: Moduł wykonawczy aplikacji ( Java ) nie jest powiązany z konsolą. Zatem brak wyświetlania wyników / błędów. Może być używany do dyskretnego przesyłania wyników / błędów do plików tekstowych. Służy głównie do uruchamiania aplikacji opartych na GUI.

javaws: ( Java web start ), aby pobrać i uruchomić rozproszone aplikacje internetowe. Ponownie żadna konsola nie jest powiązana.

Wszystkie są częścią JRE i używają tej samej JVM.


więc jeśli zainstalowałem JRE, javawpowinienem być w mojej ŚCIEŻCE? (To nie jest)
endolith

@endolith, instalacja Java w systemie Windows, z mojego doświadczenia, nie dodaje niczego do zmiennej PATH. Jeśli zainstalowałeś tylko JRE, prawdopodobnie będziesz musiał ręcznie dodać katalog JRE / bin do PATH; jeśli zainstalowałeś JRE i JDK, zamiast tego dodałeś JDK / bin do PATH.
mcduffee

9

java.exe jest powiązany z konsolą, podczas gdy javaw.exe nie ma takiego powiązania. Tak więc po uruchomieniu java.exe automatycznie otwiera okno wiersza polecenia, w którym wyświetlane są strumienie danych wyjściowych i błędów.


6

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

Polecenie javaw jest identyczne jak java, z tym że javaw nie ma powiązanego okna konsoli. Użyj javaw, jeśli nie chcesz wyświetlać okna wiersza polecenia. Program uruchamiający javaw wyświetla okno z informacją o błędzie, jeśli się nie powiedzie.

Podejrzewam, że javaws dotyczy aplikacji Java do uruchamiania w Internecie, apletów lub czegoś podobnego.


Link jest uszkodzony: „Żądana strona nie istnieje lub mogła zostać przeniesiona”.
Peter Mortensen

1

Sprawdziłem, czy przekierowanie danych wyjściowych działa z javaw:

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

Oznacza to, że jeśli aplikacja Java wydrukuje cokolwiek za pośrednictwem System.out lub System.err, zostanie zapisana w tych plikach, tak jak przy użyciu java (bez w). Zwłaszcza podczas uruchamiania javaśrodowisko JRE może zapisywać błędy początkowe (nie znaleziono klasy) na potoku wyjściowym błędu. W związku z tym należy wiedzieć o błędach. Sugeruję użycie przekierowania konsoli w każdym przypadku, jeślijavaw zostanie wywołane.

Przeciwnie, jeśli używasz

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

W przypadku startpolecenia konsoli Windows przekierowanie wyjścia konsoli nie działa z javaani zjavaw .

Wyjaśnienie, dlaczego tak jest: Myślę, że javawotwiera wewnętrzny proces w systemie operacyjnym (odpowiedni przy użyciu klasy java.lang.Process) i przenosi znane przekierowanie wyjściowe do tego procesu. Jeśli w wierszu komend nie podano przekierowania, nic nie jest przekierowywane, a wewnętrzny uruchomiony proces javawnie ma żadnych wyników konsoli. Zachowanie java.lang.Process jest podobne. Maszyna wirtualna może również korzystać z tej funkcji wewnętrznej javaw.

Jeśli użyjesz opcji „start”, konsola Windows utworzy nowy proces dla systemu Windows w celu wykonania polecenia po uruchomieniu, ale ten mechanizm nie wykorzystuje niestety danego przekierowania dla uruchomionego podprocesu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.