Quelle est la différence entre «java», «javaw» et «javaws»?


188

Quelle est la différence entre java, javawet javaws?

J'ai constaté que sur Windows, la plupart des utilisations de Java se font en utilisant javaw.


2
C'est parce que Windows a cette fâcheuse habitude de démarrer un terminal réel (qui ne devrait même pas être appelé un "Terminal" ...) au premier plan chaque fois que vous démarrez un programme avec java -cp .... Comme presque personne ne veut cela, javawc'est le choix de faire disparaître cette fenêtre ennuyeuse.
Matthieu

Réponses:


214

Consultez la documentation des outils Java pour:

  1. L' javaoutil lance une application Java. Pour ce faire, il démarre un environnement d'exécution Java, charge une classe spécifiée et appelle la mainméthode de cette classe .
  2. La javawcommande est identique à java, sauf qu'avec javawil n'y a pas de fenêtre de console associée. À utiliser javawlorsque vous ne souhaitez pas qu'une fenêtre d'invite de commande s'affiche.

La javawscommande lance Java Web Start, qui est l'implémentation de référence du Java Network Launching Protocol (JNLP). Java Web Start lance des applications / applets Java hébergées sur un réseau.

Si un fichier JNLP est spécifié, javawslancera l'application / applet Java spécifiée dans le fichier JNLP.

Le javawslanceur dispose d'un ensemble d'options prises en charge dans la version actuelle. Cependant, les options peuvent être supprimées dans une version ultérieure.

Voir aussi JDK 9 Release Notes API, fonctionnalités et options obsolètes :

Les technologies de déploiement Java sont obsolètes et seront supprimées dans une prochaine version
Les fonctionnalités de l'applet Java et WebStart, y compris l'API Applet, le plug-in Java, la visionneuse d'applet Java, JNLP et Java Web Start, y compris l' javawsoutil , sont tous obsolètes dans JDK 9 et sera supprimé dans une prochaine version.


71

java: exécuteur d'application Java associé à une console pour afficher la sortie / les erreurs

javaw: exécuteur d'application ( fenêtre Java ) non associé à la console. Donc pas d'affichage des sorties / erreurs. Il peut être utilisé pour pousser silencieusement la sortie / les erreurs vers des fichiers texte. Il est principalement utilisé pour lancer des applications basées sur l'interface graphique.

javaws: ( Java web start ) pour télécharger et exécuter les applications Web distribuées. Là encore, aucune console n'est associée.

Tous font partie de JRE et utilisent la même JVM.


donc si j'ai installé JRE, javawdevrait être dans mon PATH? (Ce n'est pas le cas)
endolith

@endolith, l'installation de Java sur Windows n'ajoute rien, d'après mon expérience, à la variable PATH. Si vous n'avez installé que JRE, vous devrez probablement ajouter le répertoire JRE / bin à PATH manuellement; si vous avez installé JRE et JDK, vous ajouteriez le JDK / bin à PATH à la place.
mcduffee

10

java.exe est associé à la console, alors que javaw.exe n'a aucune association de ce type. Ainsi, lorsque java.exe est exécuté, il ouvre automatiquement une fenêtre d'invite de commande où les flux de sortie et d'erreur sont affichés.


6

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

La commande javaw est identique à java, sauf que javaw n'a pas de fenêtre de console associée. Utilisez javaw lorsque vous ne souhaitez pas qu'une fenêtre d'invite de commande s'affiche. Le lanceur javaw affiche une fenêtre avec des informations d'erreur en cas d'échec.

Et javaws est pour les applications de démarrage Web Java, les applets ou quelque chose du genre, je suppose.


Le lien est rompu: "La page demandée n'existe pas ou a peut-être été déplacée."
Peter Mortensen le

1

J'ai vérifié que la redirection de sortie fonctionne avec javaw:

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

Cela signifie que si l'application Java imprime quelque chose via System.out ou System.err, il est écrit dans ces fichiers, comme aussi avec l'utilisation de java (sans w). Surtout au démarrage java, le JRE peut écrire des erreurs de démarrage (classe non trouvée) sur le tube de sortie d'erreur. À cet égard, il est essentiel de connaître les erreurs. Je suggère d'utiliser la redirection de la console dans tous les cas si elle javawest invoquée.

En face si vous utilisez

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

Avec la console Windows startcommande, la redirection de sortie de la console ne pas travailler avec javani avec javaw.

Explication pourquoi il en est ainsi: je pense que cela javawouvre un processus interne dans le système d'exploitation (adéquat en utilisant la classe java.lang.Process), et transfère une redirection de sortie connue vers ce processus. Si aucune redirection n'est donnée sur la ligne de commande, rien n'est redirigé et le processus interne démarré pour javawn'a pas de sortie de console. Le comportement de java.lang.Process est similaire. La machine virtuelle peut également utiliser cette fonctionnalité interne javaw.

Si vous utilisez «démarrer», la console Windows crée un nouveau processus pour que Windows exécute la commande après le démarrage, mais ce mécanisme n'utilise malheureusement pas une redirection donnée pour le sous-processus démarré.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.