Citation Envoyé par spritrl Voir le message
Est-ce qu'il aurait été possible de lancer une JFrame pour chaque action (default, 1, 2, 3) et que celle-ci contienne mon action ?
Et que lorsque la JFrame se fermerait, l'action se couperait aussi car elle serait contenue dans la JFrame.
Cela servirais à ne pas ajouter de thread dans mon action.
Quelque soit la traduction technique que ça pourrait vouloir signifier ("que [cette JFrame] contienne mon action"),

    1. 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é)
    2. La boucle s'exécuterait dans son propre thread et donc on ne gagnerait pas de thread, juste de la complexité.
  1. 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.
  2. 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.
  3. 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.
  4. 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 ?
  5. 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;
               }
     
        }
    }