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.