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.
Partager