Bonjour

J’ai un problème de conception avec des Threads, l’EDT de swing et les Jframes.

Je n’arrive pas a récupérer la JFrame (à externaliser ma fenêtre) pour relancer la création d’un nouveau Canvas avec les nouveaux graphes et à exécuter les Threads dans un ordre séquentiel (même avec executor).

J’ai une première classe, BMS qui démarre les process Swing
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
createCanvas();
createWindow(TITLE, canvas);
Les traite et les stoppe. Puis 3 classes qui dérivent de celle-ci que je souhaite lancer en séquentiel (tache1 + tache2 + tache3 dans la même JFrame).

J’ai essayé plusieurs variantes de launcher qui ne marchent pas pour le lancement séquentiel (toute fonctionne en parallèle)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
    public static void main(String[] args) throws InterruptedException {
 
        FrameRunnable FR1= new FrameRunnable();
        FrameRunnable FR2= new FrameRunnable();
        FR1.start();
        FR1.join();
        FR2.start();
        FR2.join();
    }
Ou (avec un bms implements Runnable)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
    List<Runnable> runnables = new ArrayList<Runnable>();
            runnables.add(new FrameRunnable());
            runnables.add(new FrameRunnable());
            runnables.add(new FrameRunnable());
            runnables.add(new FrameRunnable());
            ExecutorService execute =     Executors.newSingleThreadExecutor();
            executeRunnables(execute, runnables);
    public static void executeRunnables(final ExecutorService service, List<Runnable> runnables){
            for(Runnable r : runnables){
                service.execute(r);
            }
            service.shutdown();
        }
Ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
    public void actionPerformed(ActionEvent e) {
            new Thread(new Runnable() {
                public void run() {
…..
    SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
 
                    bms.start();
                    }
                   });
                }
            }).start();
          }
Quelqu'un saurait-il m'indiquer d’où vient le problème du séquentiel ? Du Thread EDT de Swing ? Des launchers ?
Pour récupérer la JFrame sans la clôturer comment faire ça proprement ?

Merci d'avance pour votre aide.