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

Java Discussion :

Problème de Runtime.exec()


Sujet :

Java

  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut Problème de Runtime.exec()
    Bonjour,

    J'ai un gros problème avec la fonction Runtime.getRuntime().exec().

    J'ai un programme Java lancé depuis linux via un jar exécutable. Dans ce programme je dois appeler la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lp -c -onobanner /tmp/nomFichier
    J'ai donc essayé la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Runtime.getRuntime().exec("lp -c -onobanner /tmp/nomFichier");
    Ainsi que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Runtime.getRuntime().exec(new String[]{
    	        "lp",
    	        "-c",
    	        "-onobanner",
    	        "/tmp/nomFichier"}
    );
    Ce qui me donne une jolie exception dans les deux cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    java.io.IOException: Cannot run program "lp": java.io.IOException:error=2, No such file or directory
    ... blabla
     
    Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
            at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
            at java.lang.ProcessImpl.start(ProcessImpl.java:65)
            at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
            ... 31 more
    Le fichier existe bel et bien, je vérifie son existence avant de lancer la commande :
    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
     
    String pathTempFile = "/tmp/nomFichier";	
    File file = new File(pathTempFile);	
     
    try {
         FileWriter writer = new FileWriter(pathTempFile, false);
         try {
    	   writer.write(txtArea.getText(),0,txtArea.getText().length());
     
    	   if ( file.exists()){
    //	       String cmd = "lp -c -onobanner " + pathTempFile;
    //	       Runtime.getRuntime().exec(cmd);
    	       Runtime.getRuntime().exec(new String[]{
    	        	"lp","-c",
    	        	"-onobanner",
    	        	"/tmp/nomFichier"});
    	   }	        	
         } finally {
    	   writer.close();
    	   if ( file.exists()){
    	       file.delete();	
    	  }
         }
    } catch (IOException e) {
       e.printStackTrace();
    }
    Je ne comprends pas le problème... J'ai déjà utilisé cette fonction sur des commande type chmod (sur des fichiers dans le même répertoire). Et je n'ai jamais eut de soucis...

    J'ai pensé que ça pouvait venir du writer qui n'était pas fermé avant. Mais même en le fermant avant. J'ai exactement la même exception.

    Si quelqu'un peut m'aider, je le remercie d'avance.

    Shaina

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    et en indiquant le chemin complet le "lp" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("/le/chemin/du/programme/lp -c -onobanner /tmp/nomFichier");
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    euh peut être, par contre "lp" étant une commande linux, je ne sais pas où aller chercher son chemin complet....

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Par défaut
    Bonjour,

    Il faut bien te dire quand lançant un exec si tu n'as pas prévu le cas de base tu n'as pas vraiment un shell derrière :

    Regarde ce tuto : http://ydisanto.developpez.com/tutor.../runtime-exec/

    et ensuite là : http://blog.developpez.com/adiguba/p...s-plus-simple/

  5. #5
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Suite à la lecture du premier lien que tu m'a passé, j'ai changé ma commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Runtime.getRuntime().exec(new String[]{
    	        "/bin/sh",
    	        "-c",
    	        "lp",
    	        "-c",
    	        "-onobanner",
    	        "/tmp/uiLogDeviceApply"});
    Ce qui fait que je n'ai plus d'exception.
    Plus qu'à savoir si ma commande marche (quand j'aurais trouvé l'imprimante sur laquelle j'ai pu imprimer...).
    Merci pour votre aide !

    Shaina

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Runtime.exec et Samba
    Par zleurtor dans le forum Général Java
    Réponses: 6
    Dernier message: 13/01/2012, 09h28
  2. Problème de Runtime exec
    Par entudiant91 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/03/2011, 18h36
  3. runtime.exec shell problèmes d'espaces
    Par yoxos dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 05/10/2009, 18h16
  4. Problème avec Runtime.exec()
    Par Vince182 dans le forum Langage
    Réponses: 2
    Dernier message: 24/10/2007, 17h48
  5. Réponses: 15
    Dernier message: 21/02/2007, 17h29

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