Programmation avec l'api javacomm

Signaler
Messages postés
24
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
22 février 2006
-
Messages postés
24
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
22 février 2006
-
Bonjour, je suis en ce moment en train de tester l'API javacomm en vu de l'utiliser dans un futur projet perso.
Dans mon code de test je suis tombé sur un problème inatendu :

SerialPort port = null;
try{
port = (SerialPort)portId.open("SerialPortTest", 4000);
isPortAvailable = true;
}
catch(PortInUseException ex){
System.out.println("Port "+serialPort+" in use !");
}

//affichage des paramètres courants du port série
System.out.println("Paramètres courants du port "+serialPort+" .");
System.out.println("BaudRate : "+port.getBaudRate());
System.out.println("DataBits : "+port.getDataBits());
System.out.println("Flow Control Mode : "+port.getFlowControlMode());
System.out.println("Parity : "+port.getParity());
System.out.println("Stop bit : "+port.getStopBits());

si jamais la ligne en gras lève une exception PortInUseException, alors la ligne en rouge va elle aussi lever une exception mais de type NullPointerexception (ce qui est logique !!!).

Pour remédier à ce problème j'ai trouvé une sollution et comme mon expérience en java est "toute neuve" je voulais un avis sur cette solution :

SerialPort port = null;
boolean isPortAvailable;
try{
port = (SerialPort)portId.open("SerialPortTest", 4000);
isPortAvailable = true;
}
catch(PortInUseException ex){
System.out.println("Port "+serialPort+" in use !");
isPortAvailable = false;
}

//affichage des paramètres courants du port série
if (isPortAvailable) {
System.out.println("Paramètres courants du port "+serialPort+" .");
System.out.println("BaudRate : "+port.getBaudRate());
System.out.println("DataBits : "+port.getDataBits());
System.out.println("Flow Control Mode : "+port.getFlowControlMode());
System.out.println("Parity : "+port.getParity());
System.out.println("Stop bit : "+port.getStopBits());
}

... et ça fonctionne !!!

Gwillherm

4 réponses

Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
8
ce qui est pas logique c est que si t as une exception et que tu la catch tu devrai pas passer dans tes System.out.println(... a moins d avoir mis la clause finaly{
System.out.....
}

bref j comprend pas trop mais tu devraii plutot faire ce qu il y a en dessous c plus propre
try{
port = (SerialPort)portId.open("SerialPortTest", 4000);
isPortAvailable = true;
//affichage des paramètres courants du port série
System.out.println("Paramètres courants du port "+serialPort+" .");
System.out.println("BaudRate : "+port.getBaudRate());
System.out.println("DataBits : "+port.getDataBits());
System.out.println("Flow Control Mode : "+port.getFlowControlMode());
System.out.println("Parity : "+port.getParity());
System.out.println("Stop bit : "+port.getStopBits());
}
catch(PortInUseException ex){
System.out.println("Port "+serialPort+" in use !");
}

+++ Toinou
Messages postés
24
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
22 février 2006

Ok, mais je pensais que ce n'était que les exceptions graves comme les Runtime qui stopaient l'exécution du programme...
parce qu'apparemment celle-ci ne l'arrête pas...

Gwillherm
Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
8
ouai c les exception grave style run time qui stopent l execution du pg par contre les autres exception doivent stopper l execution de ta méthode !!!
Messages postés
24
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
22 février 2006

C'est ce qui se passe à mon avis, car lorsque port = (SerialPort)portId.open("SerialPortTest", 4000) génère une exception port est un pointeur Null, rien n'est retourné dedans la méthode open est arrêté.