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

Interfaces Graphiques en Java Discussion :

Interface graphique avec communication série


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Interface graphique avec communication série
    Bonjour,
    Je débute avec la programmation JAVA,
    J'ai un PFE contenant une interface graphique avec java,
    Cette interface va communiquer avec une carte externe à travers port série.
    Mon problème apparait lorsque je choisis un port à travers ComboBox puis je clique sur le bouton Connect,
    il me donne l'erreur suivant :
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to javax.comm.CommPortIdentifier.

    l'instruction fausse est :
    portIdSelected = (CommPortIdentifier)comboCOM.getSelectedItem();

    voila le coode soure

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    import com.sun.comm.Win32Driver;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.lang.*;
    import javax.swing.*;
    import java.io.*;
    import java.util.*;
    import javax.comm.*;
     
     
    public class ExempleCOM extends JFrame {
     
        static Enumeration portList;
        static CommPortIdentifier portId;
        static CommPortIdentifier portIdSelected;
        static String messageString = "Hello World !";
        static SerialPort serialPort;
        static OutputStream outputStream;
     
        static JButton bConnect = new JButton("Connect");
        JButton bDeconnect = new JButton("Deconnect");
        JLabel lCOM = new JLabel("COM port");
     
        static JComboBox comboCOM = new JComboBox();
     
        SerialPort sPort;
        Win32Driver w32Driver = new Win32Driver();
     
        JPanel mainPane = new JPanel();
        JPanel eastPane = new JPanel();
        JPanel westPane = new JPanel();
        JPanel northPane = new JPanel();
        JPanel southPane = new JPanel();
        JPanel centerPane = new JPanel();
     
        public ExempleCOM () {
            listePort();
     
            this.setTitle("Superviseur Poste Transformateur");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //setPreferredSize(new Dimension(900, 400));
     
            westPane.setLayout(new GridLayout(2, 2, 5, 5));
            westPane.add(lCOM);
            westPane.add(comboCOM);
            westPane.add(bConnect);
            westPane.add(bDeconnect);
     
            setLayout(new BorderLayout());
            add(westPane,"West");
            add(eastPane,"East");
            add(southPane,"South");
            add(northPane,"North");
            add(centerPane,"Center");
     
            pack();
            setVisible(true);
     
        }
     
       public void listePort ()
       {
           Enumeration portListe=CommPortIdentifier.getPortIdentifiers();
           if (portListe==null)
           {
               System.err.println("Aucun port de communication détecté");
               return;
           }
           while (portListe.hasMoreElements())
           {
               portId = (CommPortIdentifier) portListe.nextElement();
               comboCOM.addItem(portId.getName());
           }
       }
     
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            new ExempleCOM();
            portList = CommPortIdentifier.getPortIdentifiers();
            bConnect.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event) {
            while (portList.hasMoreElements()) {
                portIdSelected = (CommPortIdentifier)comboCOM.getSelectedItem();
                        try {
                            serialPort = (SerialPort)
                                portIdSelected.open("SimpleWriteApp", 2000);
                        } catch (PortInUseException e) {}
                        try {
                            outputStream = serialPort.getOutputStream();
                        } catch (IOException e) {}
                        try {
                            serialPort.setSerialPortParams(9600,
                                SerialPort.DATABITS_8,
                                SerialPort.STOPBITS_1,
                                SerialPort.PARITY_NONE);
                        } catch (UnsupportedCommOperationException e) {}
                        try {
                            outputStream.write(messageString.getBytes());
                        } catch (IOException e) {}
                    }
     
                }});
     
        }
     
    }
    Rq: j'ai essayé un exemple simple de communication série, et ça marche bien.

    Vous trouverez en pièce jointe.
    Le fichier comm.jar vous devez l'ajouter au librairie du projet
    et le fichier win32com.dll au dossier systeme32 de mon windows7.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to javax.comm.CommPortIdentifier
    Dans ta combobox, tu as insérer des string et non des objets CommPortIdentifier. ( comboCOM.addItem(portId.getName()); )

    Et donc quand tu récupéré l'élément choisi (qui est un string) alors tu as le problème.

    Soit tu te débrouilles pour trouver la correspondance entre le string et un objectCommPortIdentifier que tu as surement en mémoire,
    Soit tu insères dans la combobox directement l'objet commportidentifier. (donc faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboCOM.addItem(portId);
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Je vous remercie pour votre réponse,
    cette proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboCOM.addItem(portId);
    me donne une liste avec des éléments qui ne sont pas des COM
    vous pouvez voir l'essai en pièce jointe.
    Images attachées Images attachées  

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Enfin, j'ai résolu le problème !
    ça marche très bien maintenant
    Voila le code du méthode qui assure le choix du port COM:
    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
       public void connectSelectedPort()
       {                portList = CommPortIdentifier.getPortIdentifiers();
                    while (portList.hasMoreElements()) {
                        portId = (CommPortIdentifier) portList.nextElement();
                        selectedPortName = (String)comboCOM.getSelectedItem();
                        System.out.println(portId.getName()+"Id");
                        System.out.println(selectedPortName+"selected");
                            if (portId.getName().equals(selectedPortName)) {
                                try {
                                    System.out.println(selectedPortName+" is a Serial Port");
                                    serialPort = (SerialPort)portId.open("SimpleWriteApp", 2000);
                                    System.out.println(selectedPortName+" opened");
                                } catch (PortInUseException e) {}
                                try {
                                    serialPort.setSerialPortParams(9600,
                                            SerialPort.DATABITS_8,
                                            SerialPort.STOPBITS_1,
                                            SerialPort.PARITY_NONE);
                                    System.out.println(selectedPortName+" parametred");
                                } catch (UnsupportedCommOperationException e) {}
                                break;
                            }
                    }
                }
    C'est juste le premier pas dans mon Projet
    Il me reste beaucoup de travail...
    Donc je nécessiterai vos aides.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Comment trier les items qui apparaissent dans une jComboBox ?
    Existe-t-il une instruction prêt pour ça ?

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Pourquoi ne pas trier ta liste avant d'insérer son contenu dans la JCombobox ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par nader_bhs Voir le message
    Bonjour,
    Comment trier les items qui apparaissent dans une jComboBox ?
    Existe-t-il une instruction prêt pour ça ?
    En cherchant, j'ai trouvé cette méthode:
    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
    JComboBox TrierCombo (JComboBox Combo){
      Object aux;
      int indice = Combo.getItemCount();
     
      for(int i=0;i<indice-1;i++){
        for(int j=i+1;j<indice;j++){
          if(Combo.getItemAt(i).toString().compareTo(Combo.getItemAt(j).toString()) > 0){
            aux = Combo.getItemAt(i);
            Combo.removeItemAt(i);
            Combo.insertItemAt(Combo.getItemAt(j-1),i);
            Combo.removeItemAt(j);
            Combo.insertItemAt(aux,j-1);
          }
        }
      }
      return Combo;
    }
    ça marche bien si le nombre des port COM est de 1 à 9
    mais le problème commence quand le nombre des COM dépasse 9 éléments,
    Ci joint un essai quand les COM dépassent 9 éléments.
    Images attachées Images attachées  

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Pourquoi ne pas trier ta liste avant d'insérer son contenu dans la JCombobox ?
    J'ai pas compris comment utiliser cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static <T extends Comparable<? super T>> void sort(List<T> list)

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    je suis coincé maintenant à la phase de réception des données de la carte externe à travers port série,
    Jusqu'à maintenant je peut recevoir les données, mais avec condition (lorsque j'appuie sur le bouton "recevoir" )
    voila le code responsable à la réception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            tbReceive.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    taTempLoc.setText(readTemp());
                }
            });
    Je veut que la réception soit dans une boucle infinie.
    J'ai essayé mais toujours il me donne des erreurs....

    Vous trouverez en pièce jointe le dossier de mon projet contenant le code source que j'ai développé sous NetBeans.
    Après exécution du code vous devez avoir une chose comme ça:


    Merci pour votre attention
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Débutant]Interface graphique avec eclipse
    Par steelidol dans le forum Eclipse Platform
    Réponses: 5
    Dernier message: 08/06/2006, 13h12
  2. Réponses: 5
    Dernier message: 07/12/2005, 10h41
  3. Interface graphique avec cygwin
    Par icetechnik dans le forum Applications et environnements graphiques
    Réponses: 11
    Dernier message: 05/12/2005, 14h23
  4. [Plugin][VE]Interface graphique avec VE
    Par GENERYS dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 24/06/2005, 11h40
  5. Interface graphique avec plusieurs fenêtres
    Par Copps dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 30/03/2005, 18h00

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