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

Entrée/Sortie Java Discussion :

probleme d'execution d'une ligne de commande en linux


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éprouvé
    probleme d'execution d'une ligne de commande en linux
    Salut à tous

    J'utilise le code suivant pour exécuter la lecture du fichier d'aide de mon application via adobereader
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    String[] cmd = new String[2];
    cmd[0] = l_PDFExe;
    cmd[1] = l_FichierAidePdf;
    try {
    	for (int i = 0; i < cmd.length; ++i) {
    		System.out.println(cmd[i]);//impression de la ligne de commande pour vérification sur un terminal
    	}
    	Runtime.getRuntime().exec(cmd);
    	} catch (Exception ex) {
    		ex.printStackTrace();
    	}

    Elle fonctionne parfaitement sous windows je lance bien adobereader et je lis correctement mon fichier.
    Par contre sous linux Adobe reader se lance mais met une fenêtre d'erreur indiquant que le fichier n'existe pas (ce qui n'est bien entendu pas le cas).
    J'ai vérifié que la ligne de commande que j'envoie est bonne en l'entrant dans un terminal et ça fonctionne.

    Quelqu'un a t'il une idée de ce qui se passe?
    Il y a des jours où j'éprouve une haine profonde envers microsoft
    Venez vous défouler ici ou c'est amusant
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  2. #2
    Expert éminent sénior
    Salut,


    Et à quoi ressemble cette commande ? Qu'est-ce qu'il y a dans l_PDFExe et l_FichierAidePdf ?



    Sinon depuis Java 5 on privilégie ProcessBuilder à Runtime.exec().
    Et il faut traiter ou fermer les flux d'E/S... ou bien les hériter du process courant via inheritIO() (Java 7 et +).


    // Java 5 et plus :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	Process p = new ProcessBuilder(l_PDFExe, l_FichierAidePdf)
    		.start();
     
    	p.getErrorStream().close(); // ou traitement
    	p.getInputStream().close(); // ou traitement
    	p.getOutputStream().close(); // ou traitement



    // Java 7 et plus :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    	Process p = new ProcessBuilder(l_PDFExe, l_FichierAidePdf)
    		.inheritIO()
    		.start();



    a++;
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Membre éprouvé
    Effectivement ça fonctionne mieux.
    Il y a des jours où j'éprouve une haine profonde envers microsoft
    Venez vous défouler ici ou c'est amusant
    Mon modeste site et mes modestes oeuvres sont
    Rémi