Differenza tra 'java', 'javawv e' javaws '


184

Qual è la differenza tra java, javawe javaws?

Ho scoperto che sotto Windows viene iniziata la maggior parte di Java javaw.


2
Questo perché Windows ha questa fastidiosa abitudine di avviare un vero Terminale (che non dovrebbe nemmeno essere chiamato "Terminale" ...) in primo piano ogni volta che avvii un programma java -cp .... Come quasi nessuno lo vuole, javawè la scelta di far scomparire quella fastidiosa finestra.
Matthieu

Risposte:


212

Vedi documentazione per:

  • javacomando 1 / javawcomando 2
    1. Lo javastrumento avvia un'applicazione Java. Lo fa avviando un ambiente runtime Java, caricando una classe specificata e invocando il mainmetodo di quella classe .
    2. Il javawcomando è identico a java, tranne per il fatto che javawnon esiste una finestra della console associata. Utilizzare javawquando non si desidera che venga visualizzata una finestra del prompt dei comandi.
  • javawscomando , il " comando Java Web Start "

    Il javawscomando avvia Java Web Start, che è l'implementazione di riferimento di Java Network Launching Protocol (JNLP). Java Web Start avvia le applicazioni / applet Java ospitate su una rete.

    Se viene specificato un file JNLP, javawsverrà avviata l'applicazione / applet Java specificata nel file JNLP.

    Il programma di javawsavvio ha una serie di opzioni supportate nella versione corrente. Tuttavia, le opzioni potrebbero essere rimosse in una versione futura.

    Vedi anche Note sulla versione di JDK 9 API, funzionalità e opzioni obsolete :

    Le tecnologie di distribuzione Java sono obsolete e verranno rimosse in una versione futura
    Applet Java e funzionalità WebStart, tra cui l'API applet, il plug-in Java, Java Applet Viewer, JNLP e Java Web Start, incluso lo javawsstrumento , sono tutti deprecati in JDK 9 e verranno rimossi in una versione futura.


69

Giava: esecutore dell'applicazione Java associato a una console per visualizzare output / errori

javaw: ( Java windowed ) esecutore dell'applicazione non associato alla console. Quindi nessuna visualizzazione di output / errori. Può essere utilizzato per inviare silenziosamente l'output / errori ai file di testo. Viene utilizzato principalmente per avviare applicazioni basate sulla GUI.

javaws: ( Java web start ) per scaricare ed eseguire le applicazioni web distribuite. Ancora una volta, nessuna console è associata.

Tutti fanno parte di JRE e utilizzano la stessa JVM.


quindi se ho installato JRE, javawdovrebbe essere nel mio PERCORSO? (Non lo è)
endolith,

@endolith, l'installazione Java su Windows non aggiunge, nella mia esperienza, nulla alla variabile PATH. Se hai solo installato JRE, probabilmente dovrai aggiungere manualmente la directory JRE / bin a PATH; se hai installato JRE e JDK, aggiungi invece JDK / bin a PATH.
mcduffee,

9

java.exe è associato alla console, mentre javaw.exe non ha alcuna associazione del genere. Pertanto, quando viene eseguito java.exe , si apre automaticamente una finestra del prompt dei comandi in cui vengono visualizzati i flussi di output e di errore.


6

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

Il comando javaw è identico a java, tranne per il fatto che javaw non ha una finestra della console associata. Utilizzare javaw quando non si desidera visualizzare una finestra del prompt dei comandi. Il programma di avvio javaw visualizza una finestra con informazioni di errore in caso di errore.

E javaws è per applicazioni Java Web Start, applet o qualcosa del genere, sospetto.


Il collegamento è interrotto: "La pagina richiesta non esiste o potrebbe essere stata spostata".
Peter Mortensen,

1

Ho verificato che il reindirizzamento dell'output funzioni con javaw:

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

Significa che se l'applicazione Java stampa qualcosa tramite System.out o System.err, viene scritta in quei file, come anche con l'uso di Java (senza w). Soprattutto all'avvio java, JRE potrebbe scrivere errori di avvio (classe non trovata) sulla pipe di output dell'errore. A questo proposito, è essenziale conoscere gli errori. Suggerisco di utilizzare il reindirizzamento della console in ogni caso se javawviene richiamato.

Al contrario se usi

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

Con il startcomando console di Windows , il reindirizzamento dell'output della console non funziona javané conjavaw .

Spiegazione del perché: penso che questo javawapra un processo interno nel sistema operativo (utilizzando adeguatamente la classe java.lang.Process) e trasferisca un reindirizzamento dell'output noto a questo processo. Se non viene fornito alcun reindirizzamento sulla riga di comando, non viene reindirizzato nulla e il processo avviato interno per javawnon ha output di console. Il comportamento per java.lang.Process è simile. Anche la macchina virtuale può utilizzare questa funzione interna javaw.

Se si utilizza "start", la console di Windows crea un nuovo processo per Windows per eseguire il comando dopo l'avvio, ma questo meccanismo non utilizza purtroppo un determinato reindirizzamento per il processo secondario avviato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.