Problème d'affichage

mariostar27 Messages postés 442 Statut Membre -  
 Utilisateur anonyme -
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");
    }



5 réponses

lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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
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
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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
Utilisateur anonyme
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Utilisateur anonyme
 
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