IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Exécution exclusive de deux commandes


Sujet :

Langage Java

  1. #1
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut Exécution exclusive de deux commandes
    Bonjour,

    Dans le programme, l'utilisateur entre une commande par ligne dans un textarea, et chaque instruction est exécutée au saut de ligne, et on met à jour un affichage (style jeu vidéo 2D ultra-basique). Par exemple:
    NOUVEAU Lion // créé un lion
    DEAPLACER 10 // le fait bouger de 10 metres
    ANNULER // ah non en fait
    L’évènement associé au Textarea est géré ainsi:
    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
    public void keyReleased(KeyEvent e) {
       String [] instruction;
       if (e.getKeyCode() == KeyEvent.VK_ENTER) {
          instruction = code.getText().split("\n");
          if (instruction.length > 0) {
             String last_instruction = instruction[instruction.length - 1].toUpperCase();
             instruction = last_instruction.split(" ");
             if (instruction[0].equals("NOUVEAU")) {
                //...
                on met à jour l'affichage sur le JPanel
             } 
             else if(instruction[0].equals("ANNULER") {
                on efface tout l'affichage sur le JPanel
                on place le curseur à la ligne 0 du Textarea
                tant que (instruction avant ANNULER n'est pas atteinte) {
                    on lance keyReleased(e)
                    on place le curseur sur l'instruction suivante
                }
             }
          }
       }
    }
    Mais voila: si je commente la ligne verte, le panneau est bien effacé, et si je la décommente, les instructions sont bien redessinées jusqu'au bon niveau MAIS par dessus l'affichage déjà existante (en gros la ligne rouge n'a pas été exécutée).

    J'ai bien vérifié avec un System.out.println: la ligne rouge est executée seulement si la ligne verte est commentée...

    Encore une fois j'ai simplifié le code qui est bien trop gros pour être mis, et la gestion de l'affichage se fait par diverses classes.

    Savez vous comment l'expliquer, d'où vient le problème? Si vous avez des questions...

    Merci beaucoup je bute depuis des heures...

  2. #2
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Si ça peut aider je vous mets le code de la gestion de l'affichage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void paintComponent(Graphics g){
       Graphics2D g2;
       switch(this.dessiner) {
          case -1:
             super.paintComponent(g);
    	 g.setColor(Color.RED);
             break;
     
          case 0:
             // etc
       }
    }
    La ligne rouge correspond à un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panneau.operation = -1;
    panneau.repaint();
    et ensuite pour retracer tout le dessin, j'associe chaque ligne du textarea a une opération et je repaint().
    Pour le teste, avant le switch je fais un println de l'opération, et je remarque bien qu'il n'est pas à -1 quand je ne commente pas la ligne verte, alors qu'il passe bien par -1 quand elle est commentée...


  3. #3
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Après quelques milliards de tests de déboggage j'ai découvert par hasard que ma récursivité plantait, car le repaint() n'était pas effectué à chaque tour de boucle, mais tout à la fin de la boucle.

    Avez vous une idée de pourquoi? Comment procéder? (si je rajoute que je suis au fond du gouffre c'est plus vendeur ?)

  4. #4
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Après quelques recherches, j'ai trouvé que la méthode repaint() ne s'effectuait qu'à la fin des boucles while et for.
    La solution est de créer une boucle for avec un Timer(), si ça peut aider quelqu'un...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/08/2009, 11h58
  2. [Système] Exécuter une ligne de commande
    Par fordprobe dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2007, 14h46
  3. Deux commandes en même temps
    Par zoom61 dans le forum IHM
    Réponses: 4
    Dernier message: 25/05/2007, 08h32
  4. Exécuter une ligne de commande dos
    Par koKoTis dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 20/08/2006, 07h03
  5. Exécuter deux commandes
    Par flouflou dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 13/08/2004, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo