Swing thread EDT et JFrame
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:
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:
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:
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:
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.