Problème d'affichage

mariostar27 Messages postés 442 Statut Membre -  
 danimo -
bonjour,
je souhaite réaliser un programme qui dialogue avec un afficheur. j'ai donc un afficheur 16 caractères et 2 lignes.
j'ai déjà réussi à envoyé des trames à celui ci. Mon but maintenant est de pouvoir afficher un String de plus de 32 caractères ( 16 * 2 ). pour cela, j'ai donc procédé comme ceci :
- découpage de ma chaîne de caractères 32 octets par 32 octets
- afficher les 32 premier caractères de mon string
- 3 secondes plus tard, afficher les 32 suivant
- etc...

seulement, dans une IHM, quand j'envoi un String > 32 caractères, ceci fonctionne, mais mon IHM ne fonctionne plus.
je pense que ceci vient de ma boucle qui ne se termine jamais. mais je ne sais pas comment faire autrement.
aidz moi svp.

code:
public void afficherMessage(String emplacementDuMessage, String message) {
        System.out.println("préparation de la mémorisation et de l'affichage de message ...");
        if (message.length() <= 32) {
            boolean memorisation = this.memoriserMessage(emplacementDuMessage, message);
            if (memorisation) {
                this.appelerMessage(emplacementDuMessage);
            }
        } else {
//**************************************** A MODIFIER **********************************************************//
            
            int debut = 0;
            int fin = 32;
            StringBuffer messBuffer = new StringBuffer(message);
            while (fin != message.length()) {
                if (fin >= message.length()) {
                    fin = message.length();
                }
                String messageAfficher = messBuffer.substring(debut, fin);
                boolean memorisation = this.memoriserMessage(emplacementDuMessage, messageAfficher);
                if (memorisation) {
                    try {
                        this.appelerMessage(emplacementDuMessage);
                        Thread.sleep(3000);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(Afficheur.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                debut += 32;
                if (fin != message.length()) {
                    fin += 32;
                } else {
                    debut = 0;
                    fin = 32;
                }
            }
//**************************************** A MODIFIER **********************************************************//
        }
        System.out.println("message mémoriser et appeler");
    }




--
gwennael

5 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Beh oui, tu ne demande pas le bout de la variable ??
    suis pas spécialiste en C mais me semble que remplacer
        while (fin != message.length()) 

    par
        while (fin !>= message.length()+32) 

    Devrait fonctionner.
    A+
    0
  2. mariostar27 Messages postés 442 Statut Membre 26
     
    ce n'ai pas du C mais du Java désolé de ne pas l'avoir précisé.
    par contre, !>= je doute que ceci existe. ou alors tu veux plutôt dire <=.
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Hum
    Peut-être essayer avant de dire ??
    par contre, !>= je doute que ceci existe.
    A+
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  4. danimo
     
    Salut,

    Tu peux essayer en ajoutant uniquement un break; <<<<<<<<<<<<<<<<<<
                    debut += 32; 
                    if (fin != message.length()) { 
                        fin += 32; 
                    } else { 
                        debut = 0; 
                        fin = 32; 
                        break; // <<<<<<<<<<<<<<<< 
                    } 
                } 
    


    Cordialement,

    Dan
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mariostar27 Messages postés 442 Statut Membre 26
     
    lermite222 j'ai essayé justement et cela ne fonctionne pas ...
    danimo j'ai essayé ton système mais rien a faire.
    je pense passer par un thread puisque je ne sortirai jamais de cette boucle de toute façon.
    un thread me permettrai de pouvoir continuer sans cesser ma boucle
    0
    1. danimo
       
      Salut,

      De toutes manières tu dois solutionner le probème de ta boucle.

      Et je te propose ceci (qui bien entendu ne traite ni l'affichage, ni la temporisation), mais qui te permet d'obtenir les tronçons à afficher.

      int longDisplay = 32;
               
                // Cas n° 1 (= 32)
               String message = "123456789*abcdefghi*ABCDEFGHI*12";
               
                // cas n° 2 (2x32)
               //String message = "123456789*abcdefghi*ABCDEFGHI*123456789*abcdefghi*ABCDEFGHI*1234";
            
                // cas n° 3 (2x32 + reste)
               //String message = "123456789*abcdefghi*ABCDEFGHI*123456789*abcdefghi*ABCDEFGHI*123456";
            
                // cas n° 4 (1x32 + reste)
               //String message = "123456789*abcdefghi*ABCDEFGHI*123456789*abcdefghi*ABCDEFGHI*12";
            
               // cas n° 5 (<32)
               //String message = "123456789*ab";
            
                       
               int debut = 0;
               int fin = 0;
               int resteLong = message.length();
               StringBuffer messBuffer = new StringBuffer(message);
            
               System.out.println("(Longueur du message: " + message.length() + "):\n");
               while (fin != message.length())
               {    
                  if(resteLong >= longDisplay)
                  {
                     fin += longDisplay;
                     System.out.println(">>>> " + messBuffer.substring(debut, fin));
                     debut += longDisplay;
                     resteLong = message.length() - fin;
                     if(resteLong == 0)
                        return;
                  }
               
                  if(resteLong < longDisplay)
                  {
                     break;
                  }
               }
               
               System.out.println("\n(Et le reste du message):");
               System.out.println(">>>> " + messBuffer.substring(debut));




      Cordialement,
      0