salut
je suis debutant en java et je voudrais réaliser une interruption de communication pendant la reception de données d'un port série grace a la touche CTRL+A. Je travaille sous Eclipse et voici le programme de ma communication liaison série :
la communication s'arrete si je ne recois plus rien grace un time out !!!


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
132
133
134
135
136
137
138
139
140
141
/**
 * Programme de Communication Liaison série
 * @version 1.0
 */
 
package communication;
import javax.comm.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import com.sun.comm.Win32Driver;	
 
 
public class C_com {
 
	protected BufferedReader m_bufRead;                     //flux de lecture du port
	protected OutputStream m_outStream;                     //flux d'écriture du port
	protected CommPortIdentifier m_portId;                  //identifiant du port
	protected SerialPort m_sPort;                           //le port série
	protected int m_flowControlIn=SerialPort.FLOWCONTROL_RTSCTS_IN;
	private String m_Port_com = "COM1";
	private int m_Bits_donnees = SerialPort.DATABITS_8;
	private int m_Parite = SerialPort.PARITY_NONE;
	private int m_Bits_stop = SerialPort.STOPBITS_1;
	private int m_Vitesse = 1200;
 
//***************************************************************************************************//
 
	/**
         * Constructeur de la classe C_com
         */
 
	public C_com(){open (m_Port_com , m_Vitesse,m_Bits_donnees,m_Bits_stop,m_Parite);}
 
//*******************************************************************************************//
 
	/**
         * Methode d'ouverture de la liaison série
         * 
         */
 
	public void open (String port_com, int vitesse, int bits_donnees, int bits_stop, int parite){
 
		/**
                 * initialisation du driver
                 */
				Win32Driver Driver = new Win32Driver();
				Driver.initialize();
		/**
                * récupération de l'identifiant du port
                */
 
				try {
						m_portId = CommPortIdentifier.getPortIdentifier(m_Port_com);}
				catch (NoSuchPortException e) {System.out.println("Port introuvable");}
 
		/**
                * Ouverture du port
                */
				try {
						m_sPort = (SerialPort) m_portId.open("UtilisationFlux", 30000);} 
				catch (PortInUseException e) {e.printStackTrace();}
 
		/**
                 * règle les paramètres de la connexion, control de flux et le Timeout
                 */
				try {
					   	m_sPort.setFlowControlMode(m_flowControlIn); 
					   	m_sPort.enableReceiveTimeout(3000);  //si on recoit rien au bout de 5s on sort du read
						m_sPort.setSerialPortParams(m_Vitesse,m_Bits_donnees,m_Bits_stop,m_Parite);} 
				catch (UnsupportedCommOperationException e) {e.printStackTrace();}
 
		/**
                 * récupération du flux de lecture et écriture du port
                 */
				try {
						m_outStream = m_sPort.getOutputStream();
						m_bufRead =new BufferedReader(new InputStreamReader(m_sPort.getInputStream()));} 
				catch (IOException e) {e.printStackTrace();}	
						}
 
//**************************************************************************************//
	/**
         * Changer les paramètres par défaut
         * 
         */
 
	public void change(String m_port_com,int m_Vitesse,int m_Bits_donnees,int m_Bits_stop,int m_Parite){
		close();
		open(m_port_com,m_Vitesse,m_Bits_donnees,m_Bits_stop,m_Parite);}
 
//****************************************************************************************//
	     /**
              * Méthode de communication générique : lecture d'une ligne de chaines de caractères (readline())
              * @return reponse
              */ 
 
	public String communique(String envoi){
		String reponse = null;
		try{
			//Demande
				m_outStream.write(envoi.getBytes());
			//Lecture
			reponse = m_bufRead.readLine().trim();}				
		catch (IOException e){e.printStackTrace();}
		return reponse;}
 
//******************************************************************************************//	
	     /**
             * La méthode de fermeture des flux et du port
             * 
             * @exception fermeture du port
              */
 
	public void close(){
		try {
			m_bufRead.close();
			m_outStream.close();
			m_sPort.close();}
		catch (IOException e) {}
			m_sPort.close();}
 
//*****************************************************************************************//
	     /**
             * Les accesseurs 
             */
 
	public int get_bitsdonnees(){return m_Bits_donnees;}
	public int get_parite(){return m_Parite;}
	public int get_bitsstop(){return m_Bits_stop;}
	public int get_vitesse(){return m_Vitesse;}
	public String get_portcom(){return m_Port_com;}
 
	public void set_bitsdonnees(int p_donnees){m_Bits_donnees=p_donnees;}
	public void set_parite(int p_parite){m_Parite=p_parite;}
	public void set_bitsstop(int p_bitsstop){m_Bits_stop=p_bitsstop;}
	public void set_vitesse(int p_vitesse){m_Vitesse=p_vitesse;}
	public void set_portcom(String p_port){m_Port_com=p_port;}
 
}