Bonjour à tous,

Je suis en train d'écrire une petite application en Java qui me permet de programmer mes cartes électroniques via un programmateur PicKit 2, directement sous Mac OSX ou Linux.

Le programme fonctionne et voici à quoi il ressemble :



Mon programme utilise donc un exécutable externe, pk2cmd, et je lui envoie donc les paramètres adéquats quand j'appuie sur chacun des boutons (à ce niveau là, ça marche nickel).
Mon souci :
J'aimerais faire en sorte que ma barre d'animation bouge pendant que j'appuie sur un des boutons et m'affiche le résultat en temps réel dans la JTextArea.
Actuellement, quand je lance une opération, le programme semble se 'freezer' pendant l'opération et n'affiche le résultat qu'une fois que le pk2cmd a fini son travail.

J'ai essayé de nombreuses méthodes, en passant par les Runtime.exec et les ProcessBuilder, mais rien n'y fait
Je sais que c'est un tout petit détail, mais ne pas comprendre pourquoi ça ne marche pas et ne pas savoir résoudre ce petit problème me donne mal au crâne

Je n'utilise que des composants swing standards.

Voici ma méthode qui est appelée quand j'appuie sur un des boutons, via un ActionListener :

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
    public void ExecuterCommande(String[] commande) {
        //On met la barre de chargement en mouvement
        progressBar.setIndeterminate(true);
        Process p = null;
        try {
            //Exemple de commande : 
            // {"/bin/bash", "-c", "pk2cmd -P -R -T"};
            ProcessBuilder pb = new ProcessBuilder(commande);
            pb.redirectErrorStream(true);
            p = pb.start();
            InputStreamReader isr = new InputStreamReader(p.getInputStream());
            BufferedReader br = new BufferedReader(isr);
 
            String lineRead;
            while ((lineRead = br.readLine()) != null) {
                // J'affice dans une JTextArea le résultat de la commande
                logArea.append(lineRead + "\n");
                logArea.setCaretPosition(logArea.getDocument().getLength());
            }
            p.waitFor();
            p.getInputStream().close();
            p.getOutputStream().close();
            p.getErrorStream().close();
            p.destroy();
        } catch (InterruptedException | IOException ex) {
            Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
        }
        // On arrête de faire bouger la barre de progression
        progressBar.setIndeterminate(false);
    }
Une idée ?