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

Langage Java Discussion :

Exception avec ProcessBuilder


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Par défaut Exception avec ProcessBuilder
    Salut,

    S'il vous plait je suis bloquée ,j'ai un problème pour l'utilisation d'une application décodeur que j'ai besoin l'intégrer dans une application java
    le probléme que j'ai utilisée un processbuilder mais y'a des exceptions
    je voudrais afficher dans l'application java comme ce qu'il m'affiche le décodeur avec une ligne de commande
    j'ai essayé avec ce code en dessous mais ça marche pas
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.lang.ProcessBuilder.Redirect;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    /**
     *
     * @author ASUS
     */
    public class rrcdecoder {
     String protocol;
       String msghexa;
       String line = "";
      //  public static void main(String[] args) throws IOException {
            final List<String> commands = new ArrayList<String>(); 
            public rrcdecoder (String p,String m)
            {protocol=p;
         msghexa=m;}
            public String getcomment() throws IOException{
                   // msghexa="0401f763";
            //protocol="RrcDl-DCCH";
            String messageId = null;
            String sens;
            if (protocol=="RrcDl-DCCH" )
                    sens="4";
            else 
                sens="10";
     
    commands.add("decoderplugincli.exe");
    commands.add("--d");
    commands.add("-s");
    commands.add(msghexa);
    commands.add("-f");
    commands.add("textfullfield");
    commands.add("-k");
    commands.add("0401f763");
    commands.add("-o");
    commands.add(sens);
     
     
    Runtime runtime = Runtime.getRuntime();
    final Process process = runtime.exec(new String[] { "C:\\gatodecoder-1.3.3\\exe",commands.toString()}) ;
     
    // Consommation de la sortie standard de l'application externe dans un Thread separe
    new Thread() {
    	public void run() {
    		try {
    			BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
     
    			try {
    				while((line = reader.readLine()) != null) {
    					// Traitement du flux de sortie de l'application si besoin est
                                            System.out.println(line);
    				}
    			} finally {
    				reader.close();
    			}
    		} catch(IOException ioe) {
    			ioe.printStackTrace();
    		}
    	}
    }.start();return line;
    }}
    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
    java.io.IOException: Cannot run program "C:\gatodecoder-1.3.3\exe": CreateProcess error=5, Accès refusé
    	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    	at java.lang.Runtime.exec(Runtime.java:620)
    	at java.lang.Runtime.exec(Runtime.java:485)
    	at rrcdecoder.getcomment(rrcdecoder.java:47)
    	at Scena.tracerflow(Scena.java:249)
    	at Fenetre3$ListListener.doInBackground(Fenetre3.java:845)
    	at Fenetre3$ListListener.doInBackground(Fenetre3.java:784)
    	at javax.swing.SwingWorker$1.call(SwingWorker.java:295)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    	at javax.swing.SwingWorker.run(SwingWorker.java:334)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)
    Caused by: java.io.IOException: CreateProcess error=5, Accès refusé
    	at java.lang.ProcessImpl.create(Native Method)
    	at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
    	at java.lang.ProcessImpl.start(ProcessImpl.java:137)
    	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    	... 12 more
    pour la ligne de commande
    Nom : Capture.PNG
Affichages : 901
Taille : 32,6 Ko

    merci d'avance pour votre aide et vos réponses

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Déjà, tu n'utilises pas un ProcessBuilder, mais Runtime.exec(). Ensuite, le tableau "paramètres" constitue la commande. Or, tu inclus le dossier contenant l'exécutable, en premier élément : final Process process = runtime.exec(new String[] { "C:\\gatodecoder-1.3.3\\exe",commands.toString()}) ;. Donc, c'est comme si tu essayais d'exécuter le dossier, pas l'exe. Il faudra éventuellement indiquer (méthode directory() de ProcessBuilder, ou troisième paramètre de Runtime.exec(String[] command, String[] environnement, File directory) que tu veux exécuter l'exécutable dans le dossier en question (ou un autre), mais il faut surtout que Java puisse déterminer où se trouve l'exe, donc donner le chemin complet (concaténer le chemin avec le nom de l'exe), sauf à exécuter le programme Java dans le dossier qui contient l'exe.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Par défaut
    Salut joel

    j'ai essayé avec ce code j'ai changé les paramètres,mais le meme problème encore il n'a pas reconnu le nom de répertoire
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.lang.ProcessBuilder.Redirect;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    /**
     *
     * @author ASUS
     */
    public class rrcdecoder {
     String protocol;
       String msghexa;
       String line = "";
      //  public static void main(String[] args) throws IOException {
            final List<String> commands = new ArrayList<String>(); 
            public rrcdecoder (String p,String m)
            {protocol=p;
         msghexa=m;}
            public String getcomment() throws IOException{
                   // msghexa="0401f763";
            //protocol="RrcDl-DCCH";
            String messageId = null;
            String sens;
            if (protocol=="RrcDl-DCCH" )
                    sens="4";
            else 
                sens="10";
    //commands.add("cd \"C:\\gatodecoder-1.3.3\\exe");           
    commands.add("decoderplugincli.exe");
    commands.add("--d");
    commands.add("-s");
    commands.add(msghexa);
    commands.add("-f");
    commands.add("textfullfield");
    commands.add("-k");
    commands.add("0401f763");
    commands.add("-o");
    commands.add(sens);
    
    
    Runtime runtime = Runtime.getRuntime();
    
    String []envp=new String[]{"C:\\gatodecoder-1.3.3\\exe"};
    File dir=new File("C:\\gatodecoder-1.3.3\\exe\\decoderplugincli.exe");
    final Process process = runtime.exec(commands.toString(), envp, dir);
    
    
    // Consommation de la sortie standard de l'application externe dans un Thread separe
    new Thread() {
    	public void run() {
    		try {
    			BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    			
    			try {
    				while((line = reader.readLine()) != null) {
    					// Traitement du flux de sortie de l'application si besoin est
                                            System.out.println(line);
    				}
    			} finally {
    				reader.close();
    			}
    		} catch(IOException ioe) {
    			ioe.printStackTrace();
    		}
    	}
    }.start();
    
    	    return line;
    }}
    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
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    	at java.lang.Runtime.exec(Runtime.java:620)
    	at java.lang.Runtime.exec(Runtime.java:450)
    	at rrcdecoder.getcomment(rrcdecoder.java:50)
    	at Scena.tracerflow(Scena.java:249)
    	at Fenetre3$ListListener.doInBackground(Fenetre3.java:845)
    	at Fenetre3$ListListener.doInBackground(Fenetre3.java:784)
    	at javax.swing.SwingWorker$1.call(SwingWorker.java:295)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    	at javax.swing.SwingWorker.run(SwingWorker.java:334)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)
    Caused by: java.io.IOException: CreateProcess error=267, Nom de répertoire non valide
    	at java.lang.ProcessImpl.create(Native Method)
    merci d'avance pour vos réponses

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    On t'a déjà répondu, et plusieurs fois (ici aussi par exemple, avec ProcessBuilder).

    Tu as écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String []envp=new String[]{"C:\\gatodecoder-1.3.3\\exe"};
    File dir=new File("C:\\gatodecoder-1.3.3\\exe\\decoderplugincli.exe");
    final Process process = runtime.exec(commands.toString(), envp, dir);
    Dans l'environnement (envp), toi, tu mets un nom de dossier ("C:\\gatodecoder-1.3.3\\exe"), alors que c'est l'environnement qu'il faudrait mettre, c'est-à-dire les variables d'environnement sous-entendues, ce que tu obtiens par exemple en console quand tu tapes set, ou export..., selon l'OS. Donc tu passes soit null, pour récupérer l'environnement actuel de ton programme (le plus simple pour toi), soit un truc dans le genre new String[]{"PATH=C:\\Program Files\\Java\jre1.8", "JAVA_HOME=C:\\Program Files\\Java\jre1.8", etc etc} (Attention : exemple de principe ne correspondant pas forcément à un environnement valide sur n'importe quel poste, donc à ne pas recopier tel quel).

    Dans dir, toi, tu mets un nom de fichier (C:\gatodecoder-1.3.3\exe\decoderplugincli.exe), or c'est un nom de répertoire (ou dossier) qu'il faudrait mettre ! Donc "C:\\gatodecoder-1.3.3\\exe" (ou un autre, le répertoire de travail n'étant pas forcément le répertoire qui contient ton exe). Comme tu mets un nom de fichier et non pas un nom de répertoire, Java te dit que le nom de répertoire que tu lui indiques est invalide !

    Et dans la commande, un tableau, le premier élément du tableau doit être un nom de fichier accéssible par ton programme (absolu, ou relatif au dossier de travail de ton programme), donc en absolu, "C:\\gatodecoder-1.3.3\\exe\\decoderplugincli.exe", et non pas seulement "decoderplugincli.exe", sauf si tu exécutes ton programme avec pour répertoire de travail "C:\\gatodecoder-1.3.3\\exe", sinon le fichier n'existera pas pour Java (il ne saura pas où le trouver).

    3 informations différentes, au sens différent mais précis : il faut leur attribuer les bonnes valeurs.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Par défaut
    Salut

    merci joel j'ai trouvé la solution,mais maintenant je voudrai savoir si quelqu'un d'autre voudra utiliser mon application .jar avec son ordinateur et il a aussi un décodeur installé à son pc... dans mon code java j'ai mis le path ou j'ai eu mon décodeur donc à son ordinateur c'est pas le meme path donc comment je veux régler ça pour que cette application va etre mise en marche pour n'importe qui
    merci d'avance pour vos aide

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il y a différentes solutions :

    1. Si le lancement de ton application est en commande, tu peux simplement passer en paramètre le chemin vers l'exécutable en paramètre (on le récupère dans le tableau qui est passé en paramètre de la méthode main()). Avec un jar autoexécutable, on peut prévoir de un fichier de configuration (fichier properties, xml...) qui contient la valeur, stocké dans user.dir ou user.home/ .
    2. Si l'application est une application avec interface graphique il vaudrait mieux travailler avec des préférences (soit avec l'API Préférence, soit avec un fichier). Prévoir un menu+formulaire qui permet à l'utilisateur d'indiquer le chemin de l'exécutable, formulaire qui se lance éventuellement au premier démarrage de l'application.
    3. On peut aussi utiliser un dossier particulier propre à l'utilisateur. Si l'exécutable peut être déplacé (si on est pas obligé de le mettre dans un dossier particulier, si son installation est simple (et si le déplacement ne pose pas de souci), etc). Cela peut être :
      • le dossier d'exécution. Par défaut si tu crées un File avec un chemin relatif, il sera automatiquement dans ce dossier, ou qu'on peut obtenir par la propriété système user.dir
      • un dossier relatif au home de l'utilisateur, qu'on obtient par la propriété système user.home.

    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/01/2006, 10h43
  2. [vb.net]Gestion des exceptions avec les web services
    Par mvr dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/12/2005, 22h41
  3. Réponses: 2
    Dernier message: 14/02/2005, 14h26
  4. Réponses: 3
    Dernier message: 09/11/2004, 14h43
  5. INSO Filter : "USER-defined exception" avec ctx_do
    Par Wiztiti dans le forum Oracle
    Réponses: 2
    Dernier message: 01/06/2004, 16h14

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