Разница между «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-интерфейс апплета, подключаемый модуль Java, средство просмотра апплетов Java, JNLP и Java Web Start, включая javawsинструмент , в JDK объявлены устаревшими. 9 и будут удалены в будущем выпуске.


69

Java: Исполнитель приложения Java, который связан с консолью для отображения вывода / ошибок

Ява: ( Java оконный ) исполнитель приложения, не связанный с консолью. Так что нет отображения вывода / ошибок. Это может быть использовано, чтобы молча выдвинуть вывод / ошибки в текстовые файлы. Он в основном используется для запуска приложений на основе графического интерфейса.

javaws: ( Java web start ) для загрузки и запуска распределенных веб-приложений. Опять же, консоль не связана.

Все они являются частью JRE и используют одну и ту же JVM.


так что, если я установил JRE, javawдолжно быть в моем PATH? (Это не так)
эндолит

@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 Launcher отображает окно с информацией об ошибке, если это не удается.

Я подозреваю, что javaws предназначен для приложений запуска 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.

Если вы используете 'start', консоль Windows создает новый процесс для Windows, чтобы выполнить команду после запуска, но этот механизм, к сожалению, не использует данное перенаправление для запущенного подпроцесса.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.