Differenza tra i comandi java e javaw

Differenza tra i comandi java e javaw

In questo breve articolo vedremo la differenza ed un esempio sull'utilizzo dei due comandi per lanciare un'applicazione java.

PrimeFaces: una suite di componenti Open Source per Java Server Faces
Java Decompiler: un decompilatore per Java
Pentaho Mondrian: un motore OLAP per Java

In questo breve articolo vedremo la differenza ed un esempio sull’utilizzo dei due comandi java e javaw per lanciare un’applicazione java.

Entrambi i comandi servono per lanciare una applicazione Java all’interno di una JRE (Java Runtime Environment) e per caricare le classi specificate, l’unica differenza è che il comando javaw non ha una una console ad esso associato. In altre parole quando lanciamo un’applicazione Java con il comando javaw non apparirà la finestra di comando associata (come avviene se usiamo il comando java) ed eventuali errori in fase di lancio vengono notificati tramite una finestra di dialogo con l’informazione sull’errore.

Per quanto riguarda la sintassi dei comandi è  perfettamente la stessa:

java [ options ] class [ argument ... ]
java [ options ] -jar file.jar [ argument ... ]
javaw [ options ] class [ argument ... ]
javaw [ options ] -jar file.jar [ argument ... ]

dove:

[options]:  sono le possibili opzioni da passare alla JRE, ad esempio la definizione del Classpath tramite la direttiva –cp o –classpath;

class: è il nome della classe iniziale, quella cioè che contiene il metodo main();

[argument … ]: sono i possibili parametri da passare al metodo main() della classe iniziale;

file.jar: gli eventuali jar (librerie) da includere per il corretto funzionamento della nostra applicazione, l’elenco delle librerie jar è preceduto dalla direttiva –jar.

La scelta di quale comando utilizzare si basa sul tipo di applicazione da lanciare; se si tratta di un programma prettamente testuale o che stampa periodicamente del testo a video (tramite System.out)  allora è d’obbligo utilizzare il comando java, la console è altresì importante se siamo in fase di test, poichè su di essa vengono stampati tutti gli errori rilevati durante l’esecuzione del programma, altrimenti se si tratta di un programma basato unicamente su di un’interfaccia grafica o si vuole mascherare la console, si utilizza il comando javaw.

In sintesi, utilizziamo il comando java se:

  • è un programma prettamente testuale, che prevede l’output di messaggi a video su console;
  • il programma prevede un’interazione con l’utente tramite tastiera;
  • durante la fase di test e debug di un programma.
utilizziamo invece il comando javaw se:
  • il programma utilizza esclusivamente un’interfaccia grafica;
  • si vuole nascondere di proposito la console;
  • le prestazioni del programma sono leggermente migliori.

Vediamo ora un piccolo esempio che ci permette di capire meglio la differenza tra i due comandi. Definiamo una classe in cui viene richiesta l’interazione con l’utente tramite l’inserimento di una stringa di caratteri da tastiera; se lanciamo l’applicazione con il comando java, l’applicazione resta correttamente in attesa dell’input dell’utente, altrimenti, lanciandola con il comando javaw, non verrà mostrata la console non permettendo quindi di poter inserire alcun input:

package it.AppuntiSoftware;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

public class EchoAppuntiSoftware{
    public static void main (String args[]){
      BufferedReader input = new BufferedReader(new 
      InputStreamReader(System.in));
      try {
           String line=input.readLine();
           System.out.println("Echo: "+line);
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
}

Nel caso in cui fosse generato un errore, quando usiamo il comando javaw, verrebbe lanciata una finestra di dialogo come notifica, ad esempio se all’atto del lancio del nostro esempio non includiamo la definizione del package completo verrebbe lanciata un errore generico come questo:

In questo caso non abbiamo incluso l’indicazione del package prima di specificare il nome della classe

Al link di seguito è possibile scaricare uno zip del sorgente contenente anche due file .bat (per Windows) che mostrano come il programma viene lanciato a seconda se venga scelto come comando java o javaw.

Esempio.zip

COMMENTS

WORDPRESS: 1
  • comment-avatar
    Costantino Bottles 10 anni ago

    Improvvisamente java ha smesso di funzionare. Scansione con AVAST negativo. Disinstallata precedente versione, installazione nuova versione bloccata per: “Chiave non utilizzabile nello stato specificato”.
    Tentativo di firma digitale evidenzia mancanza file “SysWOW64/javaw”. Mio s.o. Windows 8.1