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 :

RxTx, rafraichissement automatique de ports COM


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 31
    Par défaut RxTx, rafraichissement automatique de ports COM
    Bonjour à tous,

    J'ai fait un petit logiciel qui utilise la librairie RxTx. Tout fonctionne parfaitement (listing des ports disponibles, ouverture, envoi et réception des données).

    J'aimerais maintenant faire un rafraîchissement automatique de ma liste de ports COM disponible, c'est-à-dire que sur ma fenêtre graphique il y a une liste qui contient les ports disponibles, et j'aimerais qu'elle se mettre à jour lorsque je branche ou débranche un périphérique USB/Série.

    J'ai tenté une première approche: un timer rafraichit toutes les secondes en lançant la méthode getPortIdentifier et rafraichit la liste....

    -> Problème: si je sélectionne un champ dans ma liste, une seconde plus tard, l'affichage se rafraichit et je perds donc le champ que j'ai sélectionné donc c'est une mauvaise méthode.

    J'ai ensuite testé de parcourir les ports disponibles et de les mettre dans deux objets JListFilesModel pour ensuite les comparer, détecter un changement, et s'il y a changement, rafraichir l'affichage, déconnecter proprement le port qui était ouvert et qui a peut-être disparu... mais j'ai l'impression que le if (jListFilesModelOld == jListFilesModelNew) ne marche pas ...

    J'ai une dernière idée que je n'ai pas encore mise en place parce que je voulais votre avis, si je parcours les ports et que j'ajoute chaque port dans une chaine par un port.getname() et que je compare ensuite les chaines ? Ça devrait mieux marcher ?

    Sinon juste au niveau des listes en mode "objet graphique" dans un Frame, pourquoi ne peut on pas ajouter direct en utilisant l'objet graphique ? Et pourquoi faut-il passer par des JListFilesModel ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    pour comparer l'égalité de deux objets (JListFilesModel ou autre) il faut utiliser la méthode equals
    donc if (jListFilesModelOld == jListFilesModelNew) ne peut pas fonctioner

    la comparaison avec == ne fonctionne que sur des types primitifs (int, long, etc.)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre averti
    Inscrit en
    Mai 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 31
    Par défaut
    Effectivement je m'en suis rendu compte et je l'ai modifié mais cela ne fonctionne pas , ce qui est d'autant plus étrange que j'affiche dans la console la valeur de ces deux listesModel et qu'elles sont semblables...


    Voici la fonction qui renvoie oui ou non si un changement a était détecté ( elle est appelée toutes les secondes par un Timer.


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
        private boolean isNewPortConnected(){
     
            boolean monBool;
            monBool = false;
     
            this.listePortsDisponibles = CommPortIdentifier.getPortIdentifiers();
     
            System.out.println("liste port disponible = "+this.listePortsDisponibles);
     
             if(this.listePortsDisponibles== null) {
     
                this.jListFilesModelTemp.addElement("Aucun");
     
             //   this.messLabel.setText("Aucun port n'est disponible sur la machine.");
            }
     
            else {  
                 jListFilesModelTemp.clear();
                while(this.listePortsDisponibles.hasMoreElements()) {
     
                    this.unPortDisponible = (CommPortIdentifier)this.listePortsDisponibles.nextElement();
                    this.jListFilesModelTemp.addElement(this.unPortDisponible.getName() );
                    compteur++;
                }
            //    this.messLabel.setText("Récupération des ports réussie.");
            }          
     
            System.out.println("temp"+this.jListFilesModelTemp + compteur);
            System.out.println("encour"+this.jListFilesModelEnCour);
     
            //System.out.println("new"+this.listePortsDisponiblesOld.hashCode());
     
            if( !(jListFilesModelTemp.equals(jListFilesModelEnCour))  ){
     
                System.out.println("difference de chaineteeeeeeee");
     
                //for loop
              //  jListFilesModelEnCour.clear();
     
                for(index=0;index<jListFilesModelTemp.getSize();index++){
     
                    jListFilesModelEnCour.add(index, jListFilesModelEnCour.elementAt(index) );
     
                }
                monBool=true;
     
            }
     
        return monBool;    
        }


    Voici un extrait de ce que j'affiche dans la console, et qui donne un test toujours vrai !!!



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    liste port disponible = gnu.io.CommPortEnumerator@45544e03
    temp[COM1, COM2]10
    encour[COM1, COM2]
    difference de chaineteeeeeeee
    oui
    GÉNÉRATION TERMINÉE (durée totale* 5 secondes)

Discussions similaires

  1. connecter et selectionner le port com automatiquement
    Par gastoncs dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/07/2011, 15h40
  2. Utilisation des ports COM en Java avec RXTX
    Par philippe57460 dans le forum Général Java
    Réponses: 13
    Dernier message: 02/02/2010, 12h18
  3. rafraichissement radiobutton du port com (composant de nono)
    Par chourmo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 15/02/2006, 14h52
  4. [javaComm]Communication port COM
    Par gui4593 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 04/06/2004, 12h35
  5. port com
    Par jeremi dans le forum C
    Réponses: 12
    Dernier message: 16/09/2002, 11h37

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