Exemple d'utilisation de la classe runtime

Soyez le premier à donner votre avis sur cette source.

Vue 4 971 fois - Téléchargée 698 fois

Description

Cette source présente deux exemples qui illustrent l'utilisation de la classe Runtime
- Une classe Ping qui permet de lancer une commande ping à l'aide de Runtime
- Une classe LancementJava qui permet de lancer un programme java à l'aide de Runtime

Elle contient également une classe RecuperationSorties qui permet de rediriger un flux vers la console dans un thread distinct du thread courant.

Source / Exemple :


Code permettant de lancer une commande dos :
import java.io.IOException; 

/**
 * <b>Ping est la classe qui permet de lancer un ping sur une machine</b>
 * <p>
 * Cette classe contient une méthode ping qui réalise un ping sur la machine dont l'ip est passée en paramètre
 * </p>
 * <p>
 * Cet exemple permet de vérifier si on peut joindre une machine grâce à un ping.  
 * La méthode ping permet de réaliser le ping sur une machine passée en parametre en  
 * utilisant la classe Runtime.  
 * </p>
 */
public class Ping {

	/**
	 * Cette méhthode permet de réaliser un ping sur la machine dont l'ip est passée en paramètre
	 * @param nomMachine
	 * 	L'adresse ip ou le nom de la machine à pinger
	 * @return vrai si la machine est joignable par le ping et faux sinon
	 */
	public boolean ping(String nomMachine){
		int exitValue=1;
		
		/* Récupération de l'environnement d'exécution */
		Runtime runtime = Runtime.getRuntime();
		
		try {
			/* Création et lancement de processus qui fait le ping */
			Process process = runtime.exec("cmd /c "+"ping "+nomMachine);
			
			/* Lancement du thread de récupération de la sortie standard */
			new RecuperationSorties(process.getInputStream()).start();
			
			/* Lancement du thread de récupération de la sortie en erreur */
			new RecuperationSorties(process.getErrorStream()).start();
			
			/* On enregistre le code retour */
			exitValue=process.waitFor();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
		catch (InterruptedException e) {
			e.printStackTrace();
		}
		return exitValue==0;
	}
	
	public static void main(String[] args){
		Ping exemple = new Ping();
		boolean trouve=exemple.ping("localhost");
		System.out.println(trouve);
	}
} 


Code permettant de récupérer un flux de sortie :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * <b>
 * RecuperationSorties est la classe qui permet de récupérer   
 * les sorties d'une commande lancée avec Runtime et de les   
 * rediriger vers la console  
 * </b>  
 * <p>  
 * Cette classe est caractérisée par les informations suivantes :  
 * <ul>  
 * <li>Le flux à rediriger</li>  
 * </ul>  
 * </p>  
 * <p>  
 * Cette classe définit un thread, on peut lancer la récupération  
 * avec la méthode start().  
 * </p>  
 *   
 * @author Julien  
 * @version 1.0   
 */
public class RecuperationSorties extends Thread {  

	/**  Le flux à rediriger  */
	private InputStream flux;

	/**
	 * <b>Constructeur de RecuperationSorties</b>
	 * @param flux
	 *  Le flux à rediriger
	 */
	public RecuperationSorties(InputStream flux){
		this.flux = flux;
	}
	
	@Override
	public void run(){
		try {    
			InputStreamReader reader = new InputStreamReader(flux);
			BufferedReader br = new BufferedReader(reader);
			String ligne=null;
			while ( (ligne = br.readLine()) != null){
				System.out.println(ligne);
			}
		}
		catch (IOException ioe){
			ioe.printStackTrace();
		}
	}
} 


Exemple de lancement d'un java
import java.io.IOException;
/*
 * Cette classe montre comment lancer un programme java dans un programme java. 
 * Pour cela, on utilise la classe Runtime pour exécuter une commande windows
 */ 
public class LancementJava {

	private static final String dossierInstallation = "C:\\Program Files\\Java\\jre6";  
	
	public void lancerJava(String urlJarExecutable){
		
		/* Récupération de l'environnement d'exécution */  
		Runtime runtime = Runtime.getRuntime();
		
		try {
			/* Création et lancement de processus qui lance le java */  
			Process process = runtime.exec('"'+dossierInstallation+"\\bin\\java.exe" + '"' + " -jar " + '"' + urlJarExecutable + '"');
			
			/* Lancement du thread de récupération de la sortie standard */
			new RecuperationSorties(process.getInputStream()).start();
			
			/* Lancement du thread de récupération de la sortie en erreur */
			new RecuperationSorties(process.getErrorStream()).start();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args){ 
		LancementJava exemple = new LancementJava();  
		exemple.lancerJava("C:\\Documents and Settings\\Julien\\Bureau\\Essai.jar");
	}

} 

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

EXCELLENT BIEN QUE J'ai modifié un peu le code afin d'avoir une requête ping à l'adresse 224.0.0.1
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
286
Bonjour,

Merci pour ton commentaire.

Je vais te répondre point par point

1. C'est également possible, mais le résultat est le même.
2. C'est vrai, c'est une erreur de ma part, je mettrai la source à jour.
3. stop est dépréciée, c'est une méthode qu'on utilise plus, le thread s'arrête lorsque la condition passée dans la boucle de la méthode run passe à false. Dans mon cas, cette condition est (ligne = br.readLine()) != null : lorsqu'il n'y a plus de ligne, le thread s'arrête.

A+ et encore merci
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012

Salut,

Je me trompe peut-être sur plusieurs points, mais :
- pourquoi ne lances-tu pas tes threads de récupération des sorties standard/erreur avant d'exécuter ta commande ?
- dans ta classe RecuperationSorties, tu crées des Stream, mais tu ne les fermes jamais.
- tu fais "start" sur les threads, mais tu ne fait pas de "stop" ?

A+

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.