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

Java Discussion :

Comparaison de buffers


Sujet :

Java

  1. #1
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut Comparaison de buffers
    Bonjour,

    J'ai un prog qui recupere les mails sur un serveur.
    D'abord une premiere fois et il stock les uid dans un buffer.

    Ensuite, toutes les n minutes, et stock les uid dans un autre buffer.

    Puis, comparaison des buffers pour savoir s'il y a de nouveau messages.

    Tout marche bien a la premiere verification, puis, si j'envoie un premier mail, il le detecte bien en nouveau.
    Mais ensuite, il ne detecte plus les nouveaux mails, et je pense que ça vient des buffers.

    Voila le bout de code :

    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
     
                store.connect(pop, user, pass);
                folder = store.getFolder("INBOX");
                folder.open(Folder.READ_WRITE);
                Message messages[] = folder.getMessages(); 
                for (i = 0, n = messages.length; i < n; i++) { 
                    jTextArea1.append(i + ": " + messages[i].getFrom()[0] + "\t" + messages[i].getSubject() + "\n");
                    statusMessageLabel.setText(i + 1 + " messages pour : " + user);
     
                fp.add(UIDFolder.FetchProfileItem.UID);
                folder.fetch(folder.getMessages(), fp);
                String cle2 = fp.getItems().toString();
                cle2 = cle2.substring(cle2.lastIndexOf("@")+1);
                buf2.append(cle2);       
                if(buf2.equals(buf1)  == false) {
                    JOptionPane.showMessageDialog(null, " Vous avez un nouveau message ", "Information", JOptionPane.INFORMATION_MESSAGE, new ImageIcon("mail.png"));
     
                else 
                    statusMessageLabel.setText("Pas de nouveaux messages");      
                buf1 = null;
                buf2 = buf1;
                buf2 = null;
                folder.close(false);
                store.close();
    Je vide le premier buffer, puis met le buffer 2 dans le buffer 1 et vide le buffer 2.

    Si quelqu'un voit mon erreur ?
    Merci d'avance,
    Tres cordialement,

    ANDRE Ani

  2. #2
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    if(buf2.equals(buf1) == false)

    peut s'écrire

    if(!buf2.equals(buf1))

    par ailleurs

    for (i = 0, n = messages.length; i < n; i++) {
    jTextArea1.append(i + ": " + messages[i].getFrom()[0] + "\t" + messages[i].getSubject() + "\n");
    statusMessageLabel.setText(i + 1 + " messages pour : " + user);

    il manque une accolade non ? et, amha, ce serait plus clair écrit ainsi :

    i=0;
    for (Message message : messages) {
    jTextArea1.append(++i + ": " + message.getFrom()[0] + "\t" + message.getSubject() + "\n");
    statusMessageLabel.setText(i + 1 + " messages pour : " + user);

    Par ailleurs, "jTextArea1" n'est pas un nom très causant... et

    buf1 = null;
    buf2 = buf1;
    buf2 = null;

    est redondant, il me semble : quand tu fais "buff2 = null", buff2 est déjà à null, non ?

    Mais tout cela est difficile à analyser, car il n'y a pas les décalarations des variables, donc j'ai ptet tout faux

  3. #3
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Merci d'avoir regarde ;-)
    J'avoue que c'est un peu le bazard...

    buf1 et buf2 sont les stringbuffers dans lesquels je stock les uid des mails (en string).

    jtextarea1 permet juste d'afficher les mails (from et subject).

    Le soucis vient des stringbuffer.

    Je veux, apres la premiere comparaison, vider le buf1, mettre la valeur de buf2 dans buf1 (pour la prochaine comparaison), puis vider buf2.

    Je ne sais pas si je suis tres clair encore ?

    Voila le code pour essayer d'etre plus clair :

    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
     
                buf2 = null;
                FetchProfile fp = new FetchProfile();
                jTextArea1.setText("");
                user = "user";
                pass = "pass";
                pop = "pop";           
                props = new Properties();
                session = Session.getDefaultInstance(props, null);
                store = session.getStore("pop3");
                store.connect(pop, user, pass);
                folder = store.getFolder("INBOX");
                folder.open(Folder.READ_WRITE);
                Message messages[] = folder.getMessages(); 
                for (int i = 0, n = messages.length; i < n; i++) { 
                    jTextArea1.append(i + ": " + messages[i].getFrom()[0] + "\t" + messages[i].getSubject() + "\n");
                    statusMessageLabel.setText(i + 1 + " messages pour : " + user);
                }
                fp.add(UIDFolder.FetchProfileItem.UID);
                folder.fetch(folder.getMessages(), fp);
                String cle2 = fp.getItems().toString();
                cle2 = cle2.substring(cle2.lastIndexOf("@")+1);
                buf2.append(cle2);       
                if(!buf2.equals(buf1)) {
                    JOptionPane.showMessageDialog(null, " Vous avez un nouveau message ;-) ", "Information", JOptionPane.INFORMATION_MESSAGE, new ImageIcon("mail.png"));
                }
                else 
                    statusMessageLabel.setText("Pas de nouveaux messages");             
                buf2 = buf1;
                folder.close(false);
                store.close();
    La partie qui affiche les messages marche bien elle, les nouveaux messages sont bien affiches a chaque verif. C'est la detection des nouveaux qui se fait mal...

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Alors, en mettant les buffers à nul, tu jette le buffer, mais il a une méthode pour le vider ce qui évite de refaire la réservation de place...
    Par ailleurs, quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    buf1=null
    buf2=buf1
    buf2=null
    tu:
    jettes le buffer 1 (et son contenu)
    met la référence sur le buffer 2 à null en la rendant égale à la référence sur le buffer 1, que tu viens de jeter (donc jette le buffer2)
    puis remet à nul la référence sur le buffer 2 que tu viens d'effacer...
    ça ne transfère pas buf1 vers buf2 avant de vider buf2...

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Pour ce que tu veux faire (contenu buf1 -> buf2, buf 2 vidé si j'ai bien compris) je te conseille plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    buf2.setLength(0); //vide le buffer2
    buf2.append(buf1); //transfère le contenu de 1 vers 2
    buf1.setLength(0); //vider le buffer1

  6. #6
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Merci bien, mais finalement, j'ai reussi ;-)
    Et je ne recupere plus les UID car il change a chaque fois, mais les sujets des mails.
    Mais je vais voir avec buf.setLenght(), je n'y avais pas pense mais ça me parait plus propre, merci encore.

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

Discussions similaires

  1. Comparaison buffer strncmp
    Par benoitldr dans le forum Débuter
    Réponses: 1
    Dernier message: 19/06/2010, 10h40
  2. Réponses: 1
    Dernier message: 30/06/2008, 01h04
  3. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00
  4. Alpha blending et Z-buffer directx 8
    Par Cesar4 dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2002, 12h58

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