Categoria di runtime di Java fornisce l'accesso all'ambiente di runtime in cui l' applicazione è in esecuzione . Metodi exec di Runtime consentono di eseguire programmi esterni da un'applicazione Java . L'esecuzione di applicazioni esterne all'interno di un'applicazione Java consente di aprire una pagina Web in un browser , interagire con i programmi di utilità del sistema operativo o di lanciare una finestra di console . Prendi il Runtime Environment
Tutte le applicazioni Java hanno un'istanza del runtime environment . Utilizzare il metodo getRuntime ( ) di runtime per accedere a questo oggetto . Per esempio :
Runtime rt = Runtime.getRuntime ();
eseguire un'applicazione
runtime esterno offre diversi modi per chiamare il metodo exec , che restituisce un oggetto processo . Il modo più semplice per eseguire un'applicazione esterna è il metodo Runtime exec ( String command ) , dove " comando" è la linea di comando che esegue l'applicazione . La chiamata seguente esegue il comando "ls " per ottenere un elenco di directory per la directory root su un sistema Linux o Unix :
Process p = rt.exec ( "ls /" ) ;
il metodo exec può anche essere chiamato con un array contenente il comando ed i suoi argomenti , di variabili ambiente e la directory di lavoro.
ottenere informazioni sul processo
il Processo classe consente di accedere al flusso di input , output stream , flusso di errore e il valore di uscita del processo eseguito.
il metodo Process.getInputStream fornisce l'accesso al processo di ' flusso di output standard attraverso il flusso di ingresso dell'applicazione. Il flusso deve essere tamponata . Continuando l'esempio precedente , il codice seguente accede l'uscita dalle " ls /" stampe di comando i risultati
InputStream istrm = p.getInputStream ( ) . InputStreamReader istrmrdr = new InputStreamReader ( istrm ) ; BufferedReader buffrdr = new BufferedReader ( istrmrdr ) ;
dati String
; while ( ( dati = buffrdr.readLine ( ) ) = null ) { System.out.println ( dati); }
Allo stesso modo , è in grado di catturare il flusso di errore utilizzando Process ' getErrorStream e utilizzando un flusso di input buffer per gestire i dati . L'applicazione può anche inviare i dati al processo di ' ingresso flusso tramite flusso di output dell'applicazione. Utilizzare ' metodo getOutputStream e tamponare il flusso di output .
Uscire
acquisire il valore di uscita del processo utilizzando Process ' Processo exitValue metodo per determinare se si è terminato normalmente . Assicurarsi che il processo è terminato con il metodo waitFor Processo ' a causare il thread corrente di attendere il processo per uscire. Ad esempio , catturare il valore di uscita in una variabile , che può essere utilizzato in seguito per prendere decisioni su come l'applicazione si procederà :
int ev = 0; if ( ! P.waitFor ( ) = 0 ) { ev = p.exitValue (); }
Un processo può essere ucciso utilizzando Process ' distruggere metodo
Considerazioni
Java 5 ha introdotto la classe ProcessBuilder a sostituire Runtime.exec . ProcessBuilder rende più semplice per personalizzare il processo , e fornisce un migliore controllo di avviare il processo .
Avvertenze
Una delle caratteristiche principali del linguaggio di programmazione Java è la sua portabilità su più piattaforme . Chiamare processi esterni che sono specifici di un particolare sistema operativo mantiene l'applicazione da essere portatile . Evitare di utilizzare Runtime.exec se esiste un metodo per realizzare lo stesso obiettivo in linguaggio Java .