Détection de nouveau périphérique avec Javax.comm
Bonjour,
je suis actuellement sur un projet qui utilise l'API javax.comm.
Je me suis basé sur le tuto de Christophe Jollivet sur ce lien (super comme tuto!)
J'ai fais une IHM qui me permet de visualiser la liste de tous les ports! De ce coté aucun problème.:D
J'ai voulu rajouter une petite fonction "Actualiser" avec un bouton, mais mon problème commence ici... Après de nombreux tests, j'ai compris que pour connaitre à nouveau la liste des ports il m'est nécessaire de relancer la fonction Win32Driver.initialize() . Je récupère alors la nouvelle liste des ports, mais également la précédente...:cry:
Voici un exemple du résultat que j'obtiens:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
Etat initial:
COM1
LPT1
Je connecte un périphérique et clique sur "Actualiser":
COM1
LPT1
COM1
COM2
LPT1
Je connecte un nouveau périphérique et reclique sur "Actualiser":
COM1
LPT1
COM1
COM2
LPT1
COM1
COM2
COM3
LPT1 |
Je voulais savoir si quelqu'un possède une solution? Les idées qui me sont passées par la tête était par exemple de rafraichir le Win32Driver, ou de le désactiver pour le réactiver par la suite mais cette classe ne possède que 2 fonctions initialize() et getCommPort(String, int)...
Merci par avance pour l'aide!
PS : Si un bout de code est nécessaire je peux vous en fournir un mais je pense avoir été clair(enfin j'espère :mrgreen:).
problème de programmation des ports series
salut.
j'ai commencé par lire le tuto de http://christophej.developpez.com/tu...java/javacomm/ , j'ai téléchargé la version de l'API javaComm depuis le site de sun mais elle ne contient qu'un fichier .jar (ni .dll ni .properties), j'ai trouvé une autre version dans un autre site, j'ai suivi la procédure d'installation, j'ai commencé la programmation par ecrire la fonction qui affiche la liste des ports, aucun problem pour la compilation, mais pour l'exécution il m'affiche une exeption et 2 erreurs, je me suis rendu après que cette API ne fonctionne correctement qu'avec l'API rxtx, j'ai installé ce dernier, et j'ai ajouté un fichier "javax.comm.properties" qui contient les deux lignes de code:
Code:
1 2
| Driver de RXTX
Driver=gnu.io.RXTXCommDriver |
cette fois il m'a pas affiché l'exeption, mais tjrs les deux erreurs:
Error loading SolarisSerial: java.lang.UnsatisfiedLinkError: no SolarisSerialParallel in java.library.path
et :
Caught java.lang.UnsatisfiedLinkError: com.sun.comm.SolarisDriver.readRegistrySerial(Ljava/util/Vector;Ljava/lang/String;)I while loading driver com.sun.comm.SolarisDriver
mon programme est juste, aucun probleme pour la compilation, j'ai un port série qui fonctionne bien, (un port USB que j'ai converti en rs232 avec un adaptateur, j'ai installé le pilote, et il est affiché dans gestionnaire de périphérique com5), voila mon problème
je pense à ajouter (installer) une autre version de windows plus ancienne, mais je ne suis pas sur si le problème vient de la version de windows j'ai "vista familiale". alors qulqu peut-il m'aider à arriver à une solution.
voici mon code: (sur netbeans)
Code:
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
|
package tpreseau2;
import java.util.*;
import javax.comm.*;
import com.sun.comm.*;
//la classe jframe
public class NewJFrame extends javax.swing.JFrame {
static CommPortIdentifier portId;
static String s;
static Enumeration listeDesPorts;
/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
}
//la fonction qui liste les ports disponibles
public String listPortDisponible(){
Win32Driver w32Driver= new Win32Driver();
w32Driver.initialize();
listeDesPorts= CommPortIdentifier.getPortIdentifiers();
if (listeDesPorts==null) s=("aucun ports détecté");
while (listeDesPorts.hasMoreElements()){
portId=(CommPortIdentifier)listeDesPorts.nextElement();
s=(portId.getName());}
return (s);
}
// la suite du programme concernant l'interface
...............
............
//l'affichage de la résultat sur un label en cliquant sur un boutton
private void jToggleButton1MouseClicked(java.awt.event.MouseEvent evt) {
jLabel1.setText(listPortDisponible());
}
.....
.......
} |
merci d'avance.