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

Entrée/Sortie Java Discussion :

problème ouverture de port série


Sujet :

Entrée/Sortie Java

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut problème ouverture de port série
    Bonjour,

    J'ai fait une interface avec deux zones de texte, l'une pour réceptionner les données reçues par le port série COM1 provenant d'un autre ordinateur, et l'autre pour écrire le texte à envoyer.
    Pour ce faire j'ai créé une classe Interface qui fait appel à une classe que j'ai nommée comrs232 qui me permet de générer un objet SerialPort avec deux méthodes : une d'écriture, l'autre de lecture.
    Mon problème est que il n'y a pas ouverture du port série et le programme rentre en exception.

    Voici mes codes :

    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
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    import javax.swing.*;
    import javax.swing.text.*;
    import javax.swing.event.*;
     
    import java.awt.*;
    import java.awt.event.*;
     
    import java.io.*;
     
    public class interfacemicroordii extends JFrame
    {
        private Container contener;         //espace de la fénêtre
     
        private JTextArea ZoneDonnees;     
        private JTextArea ZoneEmission;
        private JButton Bc;                 //bouton transfert
     
        private JMenuItem b2;               //export liste des data
     
        private comrs232 coco;
     
        public interfacemicroordii()
        {
     
            //constuction des zones de texts avec l'autorisation d'écrire
           ZoneDonnees = new JTextArea("");
           ZoneDonnees.setEditable(true);
           ZoneEmission = new JTextArea("");
           ZoneEmission.setEditable(true);
     
           Bc = new JButton("Transfert");
     
            //construction des JMenuItem du menu
           b2 = new JMenuItem("Exporter les données");
     
            //dimension et nom de la fenetre
           setTitle("Interface micro-ordi");
           setSize(500,500);
     
            //prise du container par la fenetre
           contener = this.getContentPane();
     
           //Zone de text
           JPanel p01 = new JPanel();
           p01.setLayout(new GridLayout(1,2,20,20));
     
            JPanel p11 = new JPanel();
            p11.setLayout(new BorderLayout());
            p11.add(new JLabel("Données envoiées"),"North");
            p11.add(ZoneDonnees,"Center");
     
            JPanel p21 = new JPanel();
            p21.setLayout(new BorderLayout());
            p21.add(new JLabel("Message reçu"),"North");
            p21.add(ZoneEmission,"Center");
     
            p01.add(p11);
            p01.add(p21);
     
            //Bouttons d'actions
           JPanel p12 = new JPanel();
           p12.add(Bc);
     
     
           //Le menu
           JMenu menu = new JMenu("Menu");
           //menu.addSeparator();
           menu.add(b2);
     
           //Bar outil où l'on met le menu
           JMenuBar mbar = new JMenuBar();
           mbar.add(menu);
           setJMenuBar(mbar);
     
     
            //Ajout au Contener des differant panneaux
           contener.add(p01,"Center");  //zone de text
           contener.add(p12,"South");   //bouttons de cryptage et decryptage
     
     
           //création de l'objet de comm
           coco = new comrs232();
     
     
           //mise en mode lecture de coco permanent
           ZoneDonnees.setText(ZoneDonnees.getText()+coco.lire());
     
     
           //Action liees au Bc 
           ActionListener g = new ActionListener()  //classe interne
           {
                public void actionPerformed(ActionEvent e)
                {
                    Object source = e.getSource();
                    if(source==Bc)
                    {
                       coco.ecrire(ZoneEmission.getText()); 
                    }
                }
           };
     
           ActionListener mm = new ActionListener()
                {
                public void actionPerformed(ActionEvent e) 
                {
                    if(e.getSource() instanceof JMenuItem)
                        {
                            String arg = e.getActionCommand();
                            System.out.println(arg);
     
                            if(arg.equals(arg))
                            {
                                try
                                {
                                    PrintWriter sortie = new PrintWriter(
                                    new BufferedWriter(
                                    new FileWriter("Les donnees.txt")));
                                    sortie.println(ZoneDonnees.getText());
                                    sortie.close();
                                }
                                catch(IOException eee){System.out.println("exeption");}
                            }
                        }
               }
            };
           //Ecouteur
           //Bc.addActionListener(g);
           b2.addActionListener(mm);
        }
    }
    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
     
    import javax.swing.*;
    import javax.swing.text.*;
    import javax.swing.event.*;
     
    import java.awt.*;
    import java.awt.event.*;
     
    import java.io.*;
     
    import javax.comm.*;
    import com.sun.comm.Win32Driver;
    import java.util.*;
     
    public class comrs232
    {
     
        private SerialPort port;
        private CommPortIdentifier portId;
        private InputStream in;     //flux de entrée
        private OutputStream out;   //flux de sortie
        public String message_recu;
     
        public comrs232()
        {
     
            //initialisation du driver
     
            Win32Driver w32Driver = new Win32Driver();
            w32Driver.initialize();
     
     
            //récupération du port
     
            try{	
                portId=CommPortIdentifier.getPortIdentifier("COM1");
                }
                catch(NoSuchPortException ex){}
     
            try {	
                port=(SerialPort)portId.open("comrs232", 10000);
                } 
                catch (PortInUseException ex) {System.out.println("ex1");}
     
     
            //paramétrage du port et com en flux
     
            try{	
                port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
                       //paramétre de controle du flux, ici pas de controle
                       //il exist d'autre mode où il y a des controle sur RTS et CTS
                port.setSerialPortParams(9600, SerialPort.DATABITS_8, 
                                            SerialPort.STOPBITS_1, 
                                            SerialPort.PARITY_NONE);
                }
                catch (UnsupportedCommOperationException ex){System.out.println("ex2");}
        }
     
     
        public void ecrire (String message_envoye)
        {
            //les Stream sont des données en bytes donc pour envoyer un message il
            //faut convertir une chaine de charraters en une suite de int or cette 
            //transformation est réalisable charracter par charracter
     
     
            char tabmessage[];  //tableau de char
            int i;
     
            //dimensionnement du tableau et remplissage
     
            int longmessage = message_envoye.length();
            tabmessage = new char[longmessage];
            message_envoye.getChars(0,longmessage,tabmessage,0);
     
            for (i=1; i==longmessage; i++) 
            {
     
                try {	
                    out = port.getOutputStream();
                    out.write((int)tabmessage[i]); //on envoie byte par byte
                    }
                    catch (IOException ex) {System.out.println("ex3");}
            }
        }
     
     
        public String lire ()
        {
     
            BufferedReader bufRead;
            try {	
                in = port.getInputStream();
                        //on écrit les bytes entrant dans un bufferRead
                        //puis on transforme les données en bytes en string
                bufRead = new BufferedReader(new InputStreamReader(in));
                        //attention il peut y avoir des problemes s'il y a plus 
                        //d'une ligne
                message_recu = bufRead.readLine().trim();
                }
                catch (IOException ex) {System.out.println("ex4");}
            return message_recu;
        }
     
    }
    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
     
    import javax.swing.*;
    import javax.swing.text.*;
    import javax.swing.event.*;
     
    import java.awt.*;
    import java.awt.event.*;
     
    import java.io.*;
     
    import javax.comm.*;
    import com.sun.comm.Win32Driver;
    import java.util.*;
    import java.util.Enumeration.*;
     
    public class testinterface
    {
     
        public static void main(String[] args)
        {
     
            interfacemicroordii fuf = new interfacemicroordii();
            fuf.setVisible(true);
            fuf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     
        }
     
    }

    Voilà, j'espère que vous pourrez m'aider.

    Philippe.

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Plutot que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    catch(Exception e){
       System.out.println(e);
    }
    je te conseilles de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    catch(Exception e){
       e.printStackTrace();
    }
    et de nous poster le message qu'il t'affiche ( c'est beaucoup plus parlant ).

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    lorsque je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    try {    
                port=(SerialPort)portId.open("comrs232", 10000); 
                } 
                catch (PortInUseException ex) {System.out.println("ex1");}
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    try {	
                port=(SerialPort)portId.open("comrs232", 3000);
                } 
                catch (PortInUseException ex) {ex.printStackTrace(); }
    Il m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    javax.comm.PortInUseException: Port currently owned by comrs232
            at javax.comm.CommPortIdentifier.open(CommPortIdentifier.java:337)
            at comrs232.<init>(comrs232.java:40)
            at interfacemicroordii.<init>(interfacemicroordii.java:82)
            at testinterface.main(testinterface.java:21)
    java.lang.NullPointerException
            at comrs232.<init>(comrs232.java:48)
            at interfacemicroordii.<init>(interfacemicroordii.java:82)
            at testinterface.main(testinterface.java:21)
    Exception in thread "main" 
    Voila je ne sais pas trop quoi en faire....

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    Salut,

    j'ai oublié de dire quelque chose. Lorsque j'exécute la fenêtre de communication entre les deux pc, la fenêtre ne s'ouvre pas et le programme reste en « execution view ». Et tout ça sans rentrer en exception.

    Et lorsque j'essais de ré-exécuter le main ça m'indique l'erreur signalée précédemment.

    Bref je suis un peu perdu

    Bon si quelqu'un peu me débloquer ça serai bien cool.

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    Salut,

    je crois que c'est mes méthode ecrire et lire de la class comrs232 qui marche pas ou leur utilisation...

  6. #6
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    re salut à tous,

    je pense que mon probléme vient de ma méthode lire
    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
     
    public String lire ()
        {
     
            BufferedReader bufRead;
            try {	
                in = port.getInputStream();
                        //on écrit les bytes entrant dans un bufferRead
                        //puis on transforme les données en bytes en string
                bufRead = new BufferedReader(new InputStreamReader(in));
                        //attention il peut y avoir des problemes s'il y a plus 
                        //d'une ligne
                message_recu = bufRead.readLine().trim();
                }
                catch (IOException ex) {System.out.println("ex4");}
            return message_recu;
        }
    ou de son utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     //mise en mode lecture de coco permanent
           ZoneDonnees.setText(ZoneDonnees.getText()+coco.lire());
                //on réaffiche les dernieres lignes
    Ce qui est possible c'est que je n'ai pas compris comment marche InputStreamReader.

    En tous les cas si je mets la ligne avec coco.lire() la fenêtre ne s'affiche pas et le programme reste en execute view.

    Bon si quelqu'un peu m'aider ça serait cool car là je seche. Merci d'avance.

    philippe

  7. #7
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    Bon les gars,

    C’est ma méthode lire qui merde. Quand je l'actionne la fenêtre ne répond plus. En revanche la méthode ecrire marche bien. Donc si vous connaissez une méthode pour récupérer les caractères sortant du port RX, eh ben ça serai super cool.

    Merci d'avance.

    philippe

  8. #8
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    j'ai trouvé une fonction qui marche....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public char lire ()
        {
     
            //BufferedReader bufRead;
            try {	
                in = port.getInputStream();
                tretre = (char)in.read();
                }
                catch (IOException ex) {System.out.println("ex4");}
            return tretre;
    Bon à bientot à tous et bon week-end

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut com.sun.comm.Win32Driver;
    j'ai téléchargé l'API de communication JAVA : comm.jar sur le site de sun :
    http://java.sun.com/products/javacomm/index.jsp
    mais aucune trace de com.sun.comm.Win32Driver

    sauriez vous où je pourrais trouver cette librairie afin de communiquer avec mon port sérial sur Window XP ??

    merci
    El Principe Valium

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut sivaros
    Citation Envoyé par principeValium
    j'ai téléchargé l'API de communication JAVA : comm.jar sur le site de sun :
    http://java.sun.com/products/javacomm/index.jsp
    mais aucune trace de com.sun.comm.Win32Driver

    sauriez vous où je pourrais trouver cette librairie afin de communiquer avec mon port sérial sur Window XP ??

    merci
    El Principe Valium
    Salut,
    moi aussi j'ai trop souffert pour la trouver, voici le lien :
    http://www.maestra.tv/english/files/...ion=file&id=25
    bonne chance avec le monde des ports serie

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/07/2008, 10h42
  2. problème avec un port série
    Par JuTs dans le forum Composants
    Réponses: 7
    Dernier message: 15/03/2008, 23h05
  3. ouverture du port série en c++
    Par sanatou dans le forum C++
    Réponses: 11
    Dernier message: 02/11/2006, 09h55
  4. [C#]Problème avec le port série sous Win98
    Par Polux63 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 29/09/2006, 09h14
  5. Problème avec le port série sous Windows XP
    Par didou2dek dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/09/2003, 19h50

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