Quelque soit la traduction technique que ça pourrait vouloir signifier ("que [cette JFrame] contienne mon action"),
- soit la boucle s'exécuterait dans l'Event Dispatch Thread, et donc l'UI serait bloquée pensant son exécution (entre autres, plus d'affichage, plus d'interactivité)
- La boucle s'exécuterait dans son propre thread et donc on ne gagnerait pas de thread, juste de la complexité.
- Faire dépendre un traitement d'un composant d'UI est plus problématique qu'autre chose. Déjà, sur un système headless, impossible de faire tourner l'action. Pour un bot, ce serait dommage.
- Cela complique inutilement le code. Quelque soit la façon technique d'envisager le truc, arrêter la boucle sur la fermeture de la fenêtre ne se fera pas tout seul : il faudra écrire du code. Bien conçu, on se retrouvera avec le même code (ou du moins similaire, voire pire comme ça mais sans l'être au point de facilement déconnecter) que sans JFrame, mais ne pouvant fonctionner sans. D'habitude, on cherche plutôt à rendre ces composants non dépendants.
- Utiliser un composant pour faire ce que pour quoi il n'est pas fait n'engendre que des complications inutiles. On doit pouvoir planter des clous avec une chaussure, mais c'est beaucoup plus pratique avec un marteau.
- Et qui ou quoi fermerait la fenêtre ? Ton "process" de planning ? Pourquoi devrait-il fermer une fenêtre pour arrêter une action alors qu'il peut arrêter directement l'action ?
- Si tu veux vraiment ne pas avoir de thread (en dehors du thread principal), tu peux toujours envisager une boucle procédurale du genre :
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 public void main() { /** ... init diverses **/ while( running ) { switch(getAction(LocalTime.now()) { case 1: faireAction1(); break; case 2: faireAction2(); break; /*... etc */ } } } private void faireAction1() { for(int i=0; i<machins.length(); i++ ) { // faire truc avec machins.get(i); if ( getAction(LocalTime.now())!=1 ) { return; } Thread.sleep(...); if ( getAction(LocalTime.now())!=1 ) { return; } } }
Partager