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

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    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 : 791
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 : 54
    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
    Points : 29 131
    Points
    29 131
    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 régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    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 régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    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.

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    l'application est une application avec interface graphique ,et l'exécutable est déjà installé mais je ne connais pas son path ,j'ai utilisé mon path donc pour lui l'application ne va etre mise en marche

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    dans mon cas j'ai mon propre path ,le code java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ProcessBuilder pb = new ProcessBuilder(commands).directory(newFile("C:\\gatodecoder1.3.3\\exe")).redirectErrorStream(true).redirectInput(Redirect.INHERIT);
    donc comment je vais connaitre son path,comment le code devient compatible pour tous
    comment je vais utiliser ça puisque je connais pas ou l'exécutable se trouve pour les autres utilisateurs

  9. #9
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Et bien dans ce cas, utilise ce que je t'ai dit pour ce cas. Par exemple, avec une préférence.

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.io.File;
    import java.util.prefs.Preferences;
     
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.filechooser.FileFilter;
     
    public class MonApplicationPreferences {
     
    	private static final String NOM_DE_TON_APPLICATION = "Mon Application MachinChouette"; // le nom de ton application (pour reconnaitre que les préférences sont celles de ton application)
     
    	private static final String PREF_EXECUTABLE_PATH = "executablePath"; // un nom de propriété pour stocker la préférence
     
    	private String executablePath;
     
    	public MonApplicationPreferences() {
    		Preferences prefs = Preferences.userRoot().node(NOM_DE_TON_APPLICATION);
     
    		executablePath = prefs.get(PREF_EXECUTABLE_PATH, null); // lit la valeur actuelle de la préférence
    		if ( executablePath==null ) { // s'il n'y a pas de chemin dans les préférences on en demande un
    			executablePath = configExecutablePath();
    			if ( executablePath!=null ) {
    				prefs.put(PREF_EXECUTABLE_PATH, executablePath); // sauvegarde la préférence
    			}
    		}
    	}
     
    	public void editExecutablePath() {
    		executablePath = configExecutablePath();
    		if ( executablePath!=null ) {
    			Preferences prefs = Preferences.userRoot().node(NOM_DE_TON_APPLICATION);
    			prefs.put(PREF_EXECUTABLE_PATH, executablePath); // sauvegarde la préférence
    		}
    	}
     
    	private String configExecutablePath() {
    		ExecutablePathPanel dialog = new ExecutablePathPanel(executablePath); 
    		if ( JOptionPane.showConfirmDialog(null, dialog, "Sélectionner le chemin de gatodecoder.exe", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION ) {
    			String path = dialog.getPath();
    			File file = new File(path);
    			if ( file!=null ) {
    				if ( !file.exists() ) {
    					JOptionPane.showMessageDialog(null, "Fichier inexistant");
    					return null;
    				}
    			}
    			return path;
    		}
    		else {
    			return null;
    		}
    	}
     
    	public String getExecutablePath() {
    		return executablePath;
    	}
     
    	private static class ExecutablePathPanel extends JPanel {
     
    		private JTextField textField;
     
    		public ExecutablePathPanel(String file) {
    			super(new GridBagLayout());
     
    			GridBagConstraints gbc = new GridBagConstraints(); 
    			gbc.insets = new Insets(3,3,3,3);
    			gbc.weightx=1;
    			gbc.fill=GridBagConstraints.HORIZONTAL;
    			textField = new JTextField(file==null?"":file);
    			add(textField, gbc);
     
    			gbc.weightx=0;
    			gbc.gridx=1;
    			gbc.fill=GridBagConstraints.NONE;
    			JButton buttonBrowser = new JButton("Parcourir...");
    			add(buttonBrowser, gbc);
     
    			textField.setPreferredSize(new Dimension(300, (int)buttonBrowser.getPreferredSize().getHeight()));
     
    			buttonBrowser.addActionListener(e->chooseFile());
     
    		}
     
    		private void chooseFile() {
    			JFileChooser chooser = new JFileChooser();
    			if ( !textField.getText().isEmpty() ) {
    				chooser.setSelectedFile(new File(textField.getText()));
    			}
    			chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    			chooser.setFileFilter(new FileFilter() {
     
    				@Override
    				public String getDescription() {
    					return "Exécutables (.exe)";
    				}
     
    				@Override
    				public boolean accept(File f) {
    					return f.isDirectory() || f.getName().toLowerCase().endsWith(".exe");
    				}
    			});
    			if ( chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION ) {
    				File file = chooser.getSelectedFile();
    				if ( file!=null ) {
    					textField.setText(file.toString());
    				}
    			}
    		}
     
    		public String getPath() {
    			String path = textField.getText().trim();
    			if ( path.isEmpty() ) {
    				return null;
    			}
    			return path;
    		}
     
    	}
     
     
     
    	public static void main(String[] args) {
     
    		MonApplicationPreferences prefs = new MonApplicationPreferences();
     
    		System.out.println("Executable path : " + prefs.getExecutablePath());
    		JOptionPane.showMessageDialog(null, "Le chemin de l'exécutable dans les préférences est : " + prefs.getExecutablePath());
     
    	}
     
    }
    En conservant une référence sur l'objet de classe MonApplicationPreferences, tu peux a tout moment récupérer le chemin de l'exécutable. Et tu peux faire un menu qui permet de le changer, en appelant la méthode editExecutablePath().
    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.

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    merci beaucoup pour votre aide mais je veux vous expliquer que l 'application utilise cet décodeur en arrière l'utilisateur ne va pas chercher ou le décodeur se trouve
    dans notre cas si l'utilisateur va cliquer sur un élément d'une liste qui est un fichier (contient des messages en hexadecimal le décodeur va fonctionner en background pour donner le résultat et nous ferons l'affichage dans un jtextearea).
    l'utilisation de cet décodeur se fait en background
    un résumé de code pour afficher dans jtextarea
    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
    if(name.equals("RanapDirTransf")){
                                                
                                              
                                                try {
                                                   String prot= "Ranap";               //lisprot.get(j);
                                                    String msg=lisn.get(j);
                                                    System.out.println(msg);
                                                    rrcdecoder dec=new rrcdecoder(prot,msg);
                                                    String comm = null;
                                                    
                                                    comm = dec.getcomment();
                                                    System.out.println(comm);
                                          
                                                   pw.println(listetime.get(ii)+"  "+"|<----------------|     | "+fulln+"  --  "+comm+ "\n");
                                                    i++; j++;k++;      } catch (IOException ex1) {
                                                    Logger.getLogger(Scena.class.getName()).log(Level.SEVERE, null, ex1);
                                                }
                                                
                                                
                               }
    code de fonctionnement de décodeur
    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
    public class rrcdecoder {
     String protocol;
       String msghexa;
      String line = "";
      String[] splitArray = null;
      String ch="";
            final List<String> commands = new ArrayList<String>(); 
            public rrcdecoder (String p,String m)
            {protocol=p;
         msghexa=m;}
            public String getcomment() throws IOException{
                   
            String messageId = null;
    if (protocol.endsWith("Ranap" )){commands.add("decoderplugincli.exe");
    commands.add("--d");
    commands.add("-s");
    commands.add(msghexa);
    commands.add("-f");
    commands.add("textfullfield");
    commands.add("-k");
    commands.add("0701b831 ");
    
    
    System.out.println(commands);
                ProcessBuilder pb = new ProcessBuilder(commands).directory(new File("C:\\gatodecoder-1.3.3\\exe")).redirectErrorStream(true).redirectInput(Redirect.INHERIT);
    pb.start();
               pb.redirectErrorStream(true);
                Process process = pb.start();
                               try(BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
                          while (( line = reader.readLine()) != null){
                             if( line.contains("RANAP.NAS.messageId")){
                                 splitArray = line.split(" = ");
                                 ch=splitArray[1];
                        
                          }}}}else{System.out.println("cc");} return ch;}}

    tout ca se fait en arriere comme si l'utilisateur ne connait pas de ce décodeur

    donc le problème que après la conversion de l'application en jar et un autre va utiliser l'application normalement c'est pas le meme chemin que moi pour son décodeur donc comment il va l'utiliser?

  11. #11
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il n'y a pas 36 solutions si ton exécutable n'est pas à un emplacement que tu sais déterminer !!!
    • soit tu parcours le disque pour le chercher, en supposant que tu puisses reconnaître le nom (et être sûr que c'est la bonne architecture), et ça peut prendre un temps considérable (tu peux éventuellement limiter aux dossiers standards, pour chaque OS, mais ça peut prendre pas mal de temps (donc il ne faudra le faire qu'une fois, et le sauvegarder dans les préférences, et pour ça tu as tout ce qu'il faut maintenant pour le faire)
    • soit tu demandes à l'utilisateur d'indiquer le chemin (et je ne vois pas où est le problème : c'est assez courant comme pratique)
    • soit tu lui demandes de mettre l'exécutable à un emplacement que tu imposes (user.dir, user.home) (et ça, il ne pourra peut-être pas le faire)


    Choisi la solution que tu veux.
    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.

  12. #12
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dalila15 Voir le message
    tout ca se fait en arriere comme si l'utilisateur ne connait pas de ce décodeur
    C'est illogique ce que tu dis :

    1. Soit l'exécutable vient avec ton applicaiton et tu sais où il se trouve et ta question n'a aucune raison d'être
    2. Soit tu ne sais pas où elle se trouve parce que c'est l'utilisateur qui l'a installée sur son poste, et donc il sait qu'il y a cette application sur son poste (l'utilisateur ou l'installateur peu importe : à la limite si le poste est installé par un technicien ou un admin, tu fais un installeur, ou une procédure d'installation, avec un fichier de config)
    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.

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    Bon ils nous a demandé qu'au début le décodeur est déjà installé dans leurs ordinateurs sans le sélectionner à la main.l'application n'est pas censé de sélectionner l'emplacement de décodeur mais tout en arriere se fait.

    oui comme moi meme j'installe cette application je connais ou elle se trouve mais pour lui je ne connais pas donc ils veulent que ça marche en background comme si on n'utilise pas un decodeur

  14. #14
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je ne sais plus comment l'écrire :

    • Un programme ce n'est pas de la magie. Il te faut connaître l'emplacement de l'exécutable pour le lancer. Soit il est connu d'avance, soit on le détermine automatiquement, soit c'est quelqu'un qui le renseigne. Point barre. Cela n'a rien à avoir avec ce qu'on te demande de faire, mais avec ce qu'il est possible de faire.
    • Et je me fous de ce qu'on te demande de faire. Et je me fous de la solution que tu implémenteras. Je t'ai donné différentes idées de réalisation relativement simples. Il y'en a plein d'autres (des variables d'environnement, des installateurs qui placent les fichiers à l'endroit qu'on veut, on peut même faire des annuaires qu'on interroge... et probablement pleins d'autres façons plus ou moins complexes). Après tout, tu fais ce que tu veux.
    • Maintenant j'estime que je t'ai donné des réponses à ta question. Je n'ai plus de temps à perdre à trouver une énième façon de te réécrire ce que je t'ai déjà écrit.
    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