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 :

ProcessBuilder s'execute mais sans paramètres


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Par défaut ProcessBuilder s'execute mais sans paramètres
    Bonjour,

    J'ai un souci avec un processBuilder qui apparemment n'envoi pas correctement les arguments que je lui passe.

    Lors de l'execution, mon appli tiers est bien lancée, mais les paramètres ne sont pas pris en compte

    en ligne de commande cela s’exécute normalement, mes arguments sont pris en compte

    je vous donne le code pour que ça vous éclaircisse plus mon problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if(f.isFile()){
    						args.add(itit.getProperty("NNT_pathExe"));
    						args.add(" /patid " + rx.getNumeroRx());
    						args.add(" /name " + rx.getPrenomPatRx());
    						args.add(" /surname " + rx.getNomPatRx());
    						args.add(" /dateb " + rx.getDatenaissancePatRx());
     
    						for(String sfdf : args){
    							System.out.print(sfdf);
    						}
     
    						executeCommandeRx cmdRx = new executeCommandeRx("", args,"C:/NNT");
    						cmdRx.start();
    je récupère même la ligne dans le output pour l’exécuter directement en ligne de commande et ça marche.
    ce qui donne par exemple

    C:/NNT/NNTBridge.exe /patid 879563 /name SERGE /surname POLO /dateb 26/08/1975

    ma classe de processBuilder

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     public class executeCommandeRx extends Thread{
     
    	private List<String>  args;
    	private String cmd;
    	private String path ;
    	private String workingDir;
    	private Process p;
    	private ProcessBuilder pb ;
    	protected volatile boolean running = true;
     
    	public executeCommandeRx(String cmd, List<String> args, String path) {
    		this.args = args;
    		this.cmd =cmd;
    		this.path=path;
    	}
     
    	public void run() {
     
    			try {
    				List<String> strArgs = new ArrayList<String>();
    				if (!cmd.isEmpty()) {
    					strArgs.add(cmd);
    				}
     
     
    				strArgs.addAll(args);
    				pb = new ProcessBuilder(strArgs);
    				if(!path.isEmpty()){
     
    				pb.directory(new java.io.File(path));
    				}
    				pb = pb.redirectErrorStream(true);
    				p = pb.start();
     
    				InputStream is = p.getInputStream();
    				InputStreamReader isr = new InputStreamReader(is);
    				BufferedReader br = new BufferedReader(isr);
    				String line;
     
    				while ((line = br.readLine()) != null) {
    					System.out.println(line);
    				}
     
    			} catch (IOException e) {
     
    			}
    		}
     
     
    	public void finishprocess(){
     
    		System.out.println("Thread terminé");
    		p.destroy();
    		running=false;
    	}
     
    }
    Si quelqu'un pouvait m'apporter une réponse ...

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    au lieu de la commande elle-même, tu as mis la chaîne vide ""
    La commande n'est pas un paramètre, c'est la commande. C:/NNT/NNTBridge.exe ne devrait pas être dans args.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Par défaut
    Salut,
    La chaine vide, dépend si je reçois un chemin complet avec nom de l’exécutable ou pas.

    je passe le path de l’exécutable en premier dans ma liste d'argument, j'ai essayé de l'intégrer différemment comme tu le proposes mais rien n'y fait

    mon application tiers se lance, mais n’interprète pas les arguments que je lui donne

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Tes paramètres sont incorrect et ne retranscrive pas ce que tu passes en ligne de commande.

    En ligne de commande le premier paramètre est "/patid".
    Dans ton code Java le premier paramètre est " /patid 879563" !


    Bref tu devrais avoir quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    						args.add(itit.getProperty("NNT_pathExe"));
    args.add("/patid");
    args.add(rx.getNumeroRx());
    args.add("/name");
    args.add(rx.getPrenomPatRx());
    args.add("/surname");
    args.add(rx.getNomPatRx());
    args.add("/dateb");
    args.add(rx.getDatenaissancePatRx());

    Sinon le catch vide est bien laid !
    Et attention à bien traiter (ou fermer) tous les flux sous peine de risque de mauvaises surprises...


    a++

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Par défaut
    Merci de l'aide, le problème vient du fait que l'application NNT, ne veut pas s’exécuter en dehors du répertoire.
    en ayant ajouté l’exécutable dans les variables d'environnement et
    même en ayant ajouté un pb.directory(path); il ne le prend pas en compte.

    ayant résolu ça, tout marche normalement.

    sinon en effet le catch vide est un oubli, merci de l'avoir remarqué

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/05/2014, 14h12
  2. Réponses: 4
    Dernier message: 12/08/2010, 14h45
  3. Création d'une fonction sans paramètre?
    Par falcon dans le forum Oracle
    Réponses: 3
    Dernier message: 13/12/2004, 11h32
  4. Pb de COUNT et GROUP BY simple mais sans requête imbriquées
    Par vanquish dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/10/2004, 09h45
  5. [PostgreSQL]PostgreSQL sous windows mais sans Cygwin
    Par manou dans le forum Administration
    Réponses: 8
    Dernier message: 17/04/2003, 16h19

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