Різниця між "java", "javawv та" javaws "


184

У чому різниця між java, javawі javaws?

Я знайшов під Windows більшість Java починає використовувати javaw.


2
Це тому, що у Windows є така прикрою звичка запускати фактичний Термінал (який навіть не слід називати "Терміналом" ...) на передньому плані, коли ви запускаєте програму java -cp .... Оскільки цього майже ніхто не хоче, javaw- вибір зробити це дратівливе вікно зникнути.
Матьє

Відповіді:


212

Дивіться документацію для:

  • javaкоманда 1 / javawкоманда 2
    1. javaІнструмент запускає додаток Java. Це робиться, запускаючи середовище виконання Java, завантажуючи вказаний клас та використовуючи mainметод цього класу .
    2. javawКоманда ідентична java, за винятком того, що з javawтам немає пов'язаного вікна консолі. Використовуйте, javawколи ви не хочете, щоб з'явилося вікно командного рядка.
  • javawsкоманда , то " Java Web Start команду"

    У javawsкоманді запускає Java Web Start, який є еталонною реалізацією Java мережі Запуску протоколу (JNLP). Java Web Start запускає програми Java / аплети, розміщені в мережі.

    Якщо вказаний файл JNLP, javawsзапускається програма Java / аплет, зазначена у файлі JNLP.

    У javawsзапуску є набір опцій, які підтримуються в поточному випуску. Однак параметри можуть бути видалені в майбутньому випуску.

    Див. Також Примітки до випуску JDK 9 Застарілі API, функції та параметри :

    Технології розгортання Java застаріли і будуть видалені в майбутньому випуску
    функцій Java Applet і WebStart, включаючи API Applet, плагін Java, Переглядач аплет Java, JNLP та Java Web Start, включаючи javawsінструмент , усі застаріли в JDK 9 та буде видалено у майбутньому випуску.


69

java: виконавець програми Java, який пов'язаний з консоллю для відображення виводу / помилок

javaw: Виконавець програмивікні Java ) не пов'язаний з консоллю. Так що не відображається вихід / помилки. З його допомогою можна безшумно натиснути на вихідні / помилки текстові файли. В основному використовується для запуску програм на основі GUI.

javaws: ( веб-запуск Java ) для завантаження та запуску розповсюджених веб-додатків. Знову ж таки, жодна консоль не пов’язана.

Усі є частиною JRE і використовують один і той же JVM.


Так що якщо я встановив JRE, javawповинен бути в моєму PATH? (Це не так)
endolith

@endolith, установка Java в Windows, на мій досвід, нічого не додає до змінної PATH. Якщо ви встановили лише JRE, вам, ймовірно, доведеться додати каталог JRE / bin до PATH вручну; якщо ви встановили JRE та JDK, замість цього додайте JDK / bin в PATH.
mcduffee

9

java.exe асоціюється з консоллю, тоді як javaw.exe не має такої асоціації. Отже, коли запускається java.exe , він автоматично відкриває вікно командного рядка, де відображаються потоки виводу та помилок.


6

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

Команда javaw ідентична java, за винятком того, що javaw не має пов'язаного вікна консолі. Використовуйте javaw, коли ви не хочете, щоб відображалося вікно командного рядка. Запуск програми javaw відображає вікно з інформацією про помилку, якщо воно не працює.

Я б підозрював, що Java - це програми для веб-запуску Java, аплети чи щось подібне.


Посилання розірвано: "Запитана сторінка не існує або, можливо, перейшла."
Пітер Мортенсен

1

Я перевірив, що перенаправлення виводу працює з javaw:

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

Це означає, що якщо програма Java виводить що-небудь через System.out або System.err, вона записується до цих файлів, як і при використанні Java (без w). Особливо під час запуску javaJRE може записувати помилки запуску (клас не знайдено) на вихідній трубі помилки. У цьому відношенні важливо знати про помилки. Я пропоную використовувати переадресацію консолі у будь-якому випадку, якщо javawвона викликається.

Навпаки, якщо ви використовуєте

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

За допомогою startкоманди консолі Windows перенаправлення виводу консолі не працює javaні з, ні з javaw.

Пояснення, чому це так: Я думаю, що це javawвідкриває внутрішній процес в ОС (адекватно за допомогою класу java.lang.Process) і передає відоме перенаправлення виводу в цей процес. Якщо в командному рядку не вказано перенаправлення, нічого не перенаправляється, і внутрішній запущений процес для javawне має жодних консольних виходів. Поведінка для java.lang.Process схожа. Віртуальна машина також може використовувати цю внутрішню функцію javaw.

Якщо ви використовуєте "пуск", консоль Windows створює новий процес для виконання Windows командою після запуску, але цей механізм, на жаль, не використовує заданого перенаправлення для запущеного підпроцесу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.