Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java
Interfaces Graphiques en Java Forum d'entraide pour les interfaces graphiques en Java (Swing, AWT, JFace, SWT, Graphisme 2D et 3D, clients riches, ...). Avant de poster -> Les cours sur les Interfaces Graphiques - FAQ GUI Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/02/2013, 11h20   #1
nader_bhs
Invité de passage
 
Inscription : février 2013
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 7
Points : 0
Points : 0
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 :
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
Type de fichier : jpg interface graphique.jpg (10,6 Ko, 2 affichages)
Fichiers attachés
Type de fichier : rar javaxcomm.rar (31,1 Ko, 6 affichages)
nader_bhs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 17h05   #2
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 142
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2006
Messages : 2 142
Points : 4 099
Points : 4 099
Envoyer un message via MSN à wax78
Code :
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 :
comboCOM.addItem(portId);
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 21h11   #3
nader_bhs
Invité de passage
 
Inscription : février 2013
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 7
Points : 0
Points : 0
Je vous remercie pour votre réponse,
cette proposition :
Code :
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
Type de fichier : jpg COM Port essai.jpg (21,3 Ko, 3 affichages)
nader_bhs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2013, 23h42   #4
nader_bhs
Invité de passage
 
Inscription : février 2013
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 7
Points : 0
Points : 0
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 :
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.
nader_bhs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2013, 10h55   #5
nader_bhs
Invité de passage
 
Inscription : février 2013
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 7
Points : 0
Points : 0
Bonjour,
Comment trier les items qui apparaissent dans une jComboBox ?
Existe-t-il une instruction prêt pour ça ?
nader_bhs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2013, 11h19   #6
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 142
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2006
Messages : 2 142
Points : 4 099
Points : 4 099
Envoyer un message via MSN à wax78
Pourquoi ne pas trier ta liste avant d'insérer son contenu dans la JCombobox ?
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2013, 11h24   #7
nader_bhs
Invité de passage
 
Inscription : février 2013
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 7
Points : 0
Points : 0
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 :
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
Type de fichier : jpg TrierCombo.jpg (19,2 Ko, 1 affichages)
nader_bhs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2013, 11h47   #8
nader_bhs
Invité de passage
 
Inscription : février 2013
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 7
Points : 0
Points : 0
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 :
public static <T extends Comparable<? super T>> void sort(List<T> list)
nader_bhs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2013, 12h02   #9
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 142
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2006
Messages : 2 142
Points : 4 099
Points : 4 099
Envoyer un message via MSN à wax78
Jettes un oeil ici : http://www.developpez.net/forums/d33...tri-arraylist/
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/04/2013, 19h14   #10
nader_bhs
Invité de passage
 
Inscription : février 2013
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 7
Points : 0
Points : 0
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 :
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
Type de fichier : rar ExempleCOM.rar (27,2 Ko, 2 affichages)
nader_bhs est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h10.


 
 
 
 
Partenaires

Hébergement Web