Bonjour à tous,

Je dois développer pour un client une application web qui doit permettre au client de lire des RFID. Le lecteur RFID est connecté au pc CLIENT en USB mais est reconnu comme un port COM.
J'ai pensé développer un applet java mais voila je n'arrive pas à lire les données du lecteur. J'ai fouillé un peu partout sur le net à la recherche de librairie mais à chaque fois ça ne fonctionne pas. Pour tant je peux remarquer que le lecteur est bien reconnu dans l'application.
J'ai essayé un tuto qui permet d'accéder à un périphérique via le port serie:
http://christophej.developpez.com/tu...java/javacomm/
J'ai donc adapté à mon besoin:
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
142
 
 
package es.deusto.smartlab.src;
 
import javax.comm.*;
import com.sun.comm.Win32Driver;
import java.io.*;
import java.util.*;
 
public class ModeEvenement extends Thread implements SerialPortEventListener {
 
    private CommPortIdentifier portId;
    private SerialPort serialPort;
    private BufferedReader fluxLecture;
    private boolean running;
 
    /**
     * Constructeur qui récupère l'identifiant du port et lance l'ouverture.
     */
    public ModeEvenement(String port) {
        //initialisation du driver
        Win32Driver w32Driver = new Win32Driver();
        w32Driver.initialize();
        //récupération de l'identifiant du port
        try {
            portId = CommPortIdentifier.getPortIdentifier(port);
        } catch (NoSuchPortException e) {
            System.out.println(e.getMessage());
        }
 
        //ouverture du port
        try {
            serialPort = (SerialPort) portId.open("ModeEvenement", 2000);
        } catch (PortInUseException e) {
            System.out.println(e.getMessage());
        }
        //récupération du flux
        try {
            fluxLecture =
                    new BufferedReader(
                            new InputStreamReader(serialPort.getInputStream()));
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        //ajout du listener
        try {
            serialPort.addEventListener(this);
        } catch (TooManyListenersException e) {
            System.out.println(e.getMessage());
        }
        //paramétrage du port
        serialPort.notifyOnDataAvailable(true);
        try {
            serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
            serialPort.setSerialPortParams(
                    9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
        } catch (UnsupportedCommOperationException e) {
            System.out.println(e.getMessage());
        }
        System.out.println("port ouvert, attente de lecture");
    }
    public void run() {
        running = true;
        while (running) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                System.out.println(e.getMessage());
            }
        }
        //fermeture du flux et port
        try {
            fluxLecture.close();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        serialPort.close();
    }
    /**
     * Méthode de gestion des événements.
     */
    public void serialEvent(SerialPortEvent event) {
        //gestion des événements sur le port :
        //on ne fait rien sauf quand les données sont disponibles
        switch (event.getEventType()) {
            case SerialPortEvent.BI :
            case SerialPortEvent.OE :
            case SerialPortEvent.FE :
            case SerialPortEvent.PE :
            case SerialPortEvent.CD :
            case SerialPortEvent.CTS :
            case SerialPortEvent.DSR :
            case SerialPortEvent.RI :
            case SerialPortEvent.OUTPUT_BUFFER_EMPTY :
                break;
            case SerialPortEvent.DATA_AVAILABLE :
                String codeBarre = new String();
                try {
                    //lecture du buffer et affichage
                    codeBarre = (String) fluxLecture.readLine();
                    System.out.println(codeBarre);
                } catch (IOException e) {
                    System.out.println(e.getMessage());
                }
                break;
        }
    }
    /**
     * Permet l'arrêt du thread
     */
    public void stopThread() {
        running = false;
    }
 
    /**
     * Méthode principale de l'exemple.
     */
    public static void main(String[] args) {
        //Récuperation du port en argument
//        String port = args[0];
        //lancement de l'appli
//        ModeEvenement modeEve=new ModeEvenement(port);
        ModeEvenement modeEve=new ModeEvenement("COM4");
        modeEve.start();
        //"interface utilisateur"
        System.out.println("taper q pour quitter");
        //construction flux lecture
        BufferedReader clavier =
                new BufferedReader(new InputStreamReader(System.in));
        //lecture sur le flux entrée.
        try {
            String lu = clavier.readLine();
            while (!lu.equals("q")) {
            }
        } catch (IOException e) {
        }
        modeEve.stopThread();
    }
}
Le problème c'est que aucun événement n'est détecté...

J'ai également essayé cette lib:
http://www.smartlab.deusto.es/java-rfid/
mais incompatible avec la puce de mon lecteur qui est une puce microchip PIC16F877A

Merci pour votre aide. Et si jamais une autre solution que l'applet java est possible n'hésitez pas à me la proposer