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
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 createCanvas(); createWindow(TITLE, canvas);
J’ai essayé plusieurs variantes de launcher qui ne marchent pas pour le lancement séquentiel (toute fonctionne en parallèle)
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 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
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(); }
Quelqu'un saurait-il m'indiquer d’où vient le problème du séquentiel ? Du Thread EDT de Swing ? Des launchers ?
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(); }
Pour récupérer la JFrame sans la clôturer comment faire ça proprement ?
Merci d'avance pour votre aide.
Partager