IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

methode exce de Runtime


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Par défaut methode exce de Runtime
    Bonjour tous le monde

    je veux utiliser la methode Exec() de Runtime, qui est sur cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public Process exec(String command, String[] envp);
    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String[] envp = new String[] {"Path = Resource"};
     
    String Commande = "gcc.exe -E -nostdinc -B Resource \"TestCases/bddpersonnes.cpp\"" 
    	+
    " -o \"test/resNew.cpp\"";
     
    Process proc = rt.exec(Commande,envp);
    Tel que : Resource, TestCases, test sont des dossier dans la racine de mon projet

    quand j'éxécute il m'affiche l'erreur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    java.io.IOException: Cannot run program "gcc.exe": CreateProcess error=2, Le fichier spécifié est introuvable
    	at java.lang.ProcessBuilder.start(Unknown Source)
    	at java.lang.Runtime.exec(Unknown Source)
    	at java.lang.Runtime.exec(Unknown Source)
    	at java.lang.Runtime.exec(Unknown Source)
    	at Preprocess.main(Preprocess.java:30)
    Caused by: java.io.IOException: CreateProcess error=2, Le fichier spécifié est introuvable
    	at java.lang.ProcessImpl.create(Native Method)
    	at java.lang.ProcessImpl.<init>(Unknown Source)
    	at java.lang.ProcessImpl.start(Unknown Source)
    	... 5 more
    mais quand je modifie commande par la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String Commande = "Resource/gcc.exe -E -nostdinc -B Resource \"TestCases/bddpersonnes.cpp\"" 
    	+
    " -o \"test/resNew.cpp\"";
    dans ce cas il m'affiche pas l'erreur mais il me génère pas le out !!

    quelqu'un peut m'aider..merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    alors, exec n'est pas un shell, il n'ira donc ni chercher dans ton PATH après l'application, ni gérer automatiquement les entrées / sorties de ton programme. Donc, ta deuxième exécution est plus correcte, mais tu te dois encore de gérer l'objet Process que tu recois en retour, plus particulièrement les entrée et sorties de sa console afin de
    1) lire les éventuelles erreurs qu'affiche gcc
    2) empécher le programme en question de givrer lorsque ses buffers entrées / sortie seront plein.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    aussi, il est préférable d'utiliser la méthode
    exec(String[] cmdarray)
    qui permet de bien scinder les différents arguments du programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Process p = runtime.exec(new String[] {
        "Resource/gcc.exe",
        "-E",
        "-nostdinc",
        "-B",
        "Resource",
        "TestCases/bddpersonnes.cpp", 
        "-o"
        "test/resNew.cpp" });

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Par défaut
    bon j'ai suivi la méthode que tu m'a donné et toujours il me donne rien en sortie

    Citation Envoyé par tchize_ Voir le message
    2) empécher le programme en question de givrer lorsque ses buffers entrées / sortie seront plein.
    là j'ai pas bien compris ce que tu veux dire !!

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ton programme écrit sur sa "console" (les entrées sorties standard). Comme tu exécute toi meme c'est à toi de gérer sa "console", c'est à dire ses entrées sorties pour éviter que ses bufffers soient plein. -> rechercher dans les FAQs java pour plus de détails.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Par défaut
    ok
    alors j'ai essayé d'afficher ce que le process donne en sortie

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
    public static void main(String[] args) {
    	try
    	{
    		final Runtime rt = Runtime.getRuntime();
     
    // appeler le gcc et utiliser public Process exec(String[] command);
     
     
    String[] Commande = new String[] {"Resource/gcc.exe",
     "-E",
    "-nostdinc",
     "-B",
    "Resource",			
    "TestCases/bddpersonnes.cpp",
    "-o",
    "test/resNew.cpp"};
     
    Process proc = rt.exec(Commande);
     
    			 BufferedReader out2 = new BufferedReader(new InputStreamReader( proc.getInputStream()) );
     
    	         String line2 = out2.readLine();
    	         while ( (line2) != null){
    	           	 System.out.println("le2   "+line2);
    	           	 line2 = out2.readLine();
    }
    } catch (IOException e) 
            {
    			e.printStackTrace();
    		}
    	}
    là il m'affiche rien sur la console, et aussi il ne termine pas l'exécution (le boutton terminate de la console reste toujours en rouge) !!

Discussions similaires

  1. [LG]runtime error 202
    Par picsou123 dans le forum Langage
    Réponses: 2
    Dernier message: 14/11/2003, 22h53
  2. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 17h03
  3. Runtime VC++ ou MFC
    Par Elodie_nl dans le forum MFC
    Réponses: 9
    Dernier message: 03/12/2002, 17h23
  4. Methode de drcherche a l,interieur de basse de donner texte
    Par philippe V dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 03/12/2002, 10h20
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo