0/5 (3 avis)
Vue 6 640 fois - Téléchargée 809 fois
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); } }
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(); } } }
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"); } }
7 déc. 2013 à 15:19
7 mars 2012 à 19:36
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
7 mars 2012 à 17:49
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.