L'API Java Comm

eclipsia -  
Akrouti Ezzeddin Messages postés 63 Statut Membre -
Bonjour,
Je travaille avec la version 1.6 pour java et 3.3.2 pour eclipse Europa.
Pour l'installation de L'API Java Comm j'ai suivi ces étapes:
1-J'ai placer le fichier win32com.dll dans jdk\jre\bin et jdk\bin.
2-J'ai placer le fichier comm.jar dans jdk\jre\lib\ext et jdk\lib.
3-j'ai placer le fichier javax.comm.properties dans jdk\jre\lib.
4-j'ai ajouter le comm.jar dans la classPath.
5-je fais le test avec le blackbox mais me donne que "No serial ports found!"
Mais j'ai vérifier dans la base de registre et j'ai trouvj'ai 2 com(COM5,COM6).

Au niveau du code java je fais le test avec ce code:
package Console;
import javax.comm.*;
import com.sun.comm.Win32Driver;
import java.io.*;
import java.util.*;

public class AfficheTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Win32Driver w32Driver= new Win32Driver();
w32Driver.initialize();
//récupération de l'énumération
Enumeration portList=CommPortIdentifier.getPortIdentifiers();
//affichage des noms des ports
CommPortIdentifier portId;
while (portList.hasMoreElements()){
portId=(CommPortIdentifier)portList.nextElement();
System.out.println(portId.getName());
}
}
}

Mais je reçu cette message d'erreur:
Error loading win32com: java.lang.UnsatisfiedLinkError: no win32com in java.library.path.

j'ai fais pas mal de recherche sur le net mais j'ai rien trouvé.
quelqu'un peut me guider.
Comment je peux faire pour résoudre ce problème?

J'attends vos réponse dans le plus vite.
Merci d'avance.
Configuration: Windows 2000
Firefox 2.0.0.20

16 réponses

  1. eclipsia
     
    Bonjour,
    La solution que j'ai trouvé que c la position du fichier de l'API.
    Il faut placé ces fichiers dans:
    1-J'ai placer le fichier win32com.dll dans Java\jre6\bin.
    2-J'ai placer le fichier comm.jar dans Java\jre6\lib\ext et Java\jre6\lib.
    3-j'ai placer le fichier javax.comm.properties dans Java\jre6\lib.

    et ça marche bien.
    1
    1. batman68 Messages postés 101 Statut Membre 22
       
      bonjour,

      Merci pour votre réponse. Mais cela ne marche pas dans mon cas.
      En effet je lance mon application CDC sur un téléphone/PDA. Et j'utilise la JVM Mysaifu. Dans le dossier de l'application il y a un dossier jre ou jais rajouter les fichiers : comm.jar win32com.dll et javax.comm.properties dans leur bon dossier.

      Et sa ne marche pas

      Pouvez vous m'aider ?
      0
      1. eclipsia > batman68 Messages postés 101 Statut Membre
         
        Bonjour,
        si j'ai bien compris tu as met les fichiers dans le jre de l'application.Mais il faut les mettre dans dossier jre de java qui existe au niveau de Program Files
        0
      2. batman68 Messages postés 101 Statut Membre 22 > eclipsia
         
        Non je bien mit les fichier dans le dossier java/jre dans program files.

        dsl si je me suis mal exprimé
        0
  2. batman68 Messages postés 101 Statut Membre 22
     
    Svp jai besoin d'aide
    1
  3. aymen2 Messages postés 14 Statut Membre 1
     
    vous avez mal choisi votre api
    essayer une autre
    j'ai oublié exactement une adress
    mais si ta pas trouver je peut l'envoyer par msn
    aymenbenmoussa@hotmail.com
    a+
    votre programme s'execute sur mon machine
    0
  4. batman68 Messages postés 101 Statut Membre 22
     
    Salut,

    Je travaille sur un projet qui consiste a lire la position gps (et d'autre truc) sur un gps d'un téléphone/PDA.
    Pour cela on a vus dans la doc que le GPS est sur un port serie.

    J'ai donc fait la même chose que toi ( trouver sur un autre site) et j'ai le même problème !

    a tu trouvé une solution ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. batman68 Messages postés 101 Statut Membre 22
     
    Il me met exactement cette erreur :

    Error loading win32com: java.lang.UnsatisfiedLinkError: Native library `win32com' not found (as file `win32com') in gnu.classpath.boot.library.path and java.library.path
    0
  7. batman68 Messages postés 101 Statut Membre 22
     
    bonjour Biboo,

    peut tu être un peu plus explicite ?

    voici le code de mon programme de test : c'est un simple programme CDC avec un bouton.

    package test;

    import com.sun.comm.Win32Driver;
    import java.util.Enumeration;
    import javax.comm.CommPortIdentifier;


    public class Main extends javax.swing.JFrame {

    static {
    try {
    javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getCrossPlatformLookAndFeelClassName());
    } catch(Exception exception) {
    System.out.println("Error loading L&F: " + exception);
    }
    }

    /** Creates new form Main */
    public Main() {
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
    //NSIcom won't close app without this
    this.addWindowListener(new java.awt.event.WindowAdapter() {
    public void windowClosing(java.awt.event.WindowEvent e) {System.exit(0);}
    });
    // </editor-fold>
    initComponents();

    }

    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);

    jButton1.setText("jButton1");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jButton1ActionPerformed(evt);
    }
    });

    org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(layout.createSequentialGroup()
    .add(82, 82, 82)
    .add(jButton1)
    .addContainerGap(85, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
    layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(layout.createSequentialGroup()
    .add(124, 124, 124)
    .add(jButton1)
    .addContainerGap(145, Short.MAX_VALUE))
    );

    pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    //initialisation du driver
    Win32Driver w32Driver= new Win32Driver();
    w32Driver.initialize();
    //récupération de l'énumération
    Enumeration portList=CommPortIdentifier.getPortIdentifiers();
    //affichage des noms des ports
    CommPortIdentifier portId;
    while (portList.hasMoreElements()){
    portId=(CommPortIdentifier)portList.nextElement();
    System.out.println(portId.getName()); } System.out.println("Fin");

    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
    new Main().setVisible(true);
    }
    });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    // End of variables declaration

    }

    Je précise que le même programme (en application normal) fonctionne sur le PC.

    Pouvez vous m'aidez ?

    P.S le code que jais tapé est en gars il provient de se tutorial : https://christophej.developpez.com/tutoriel/java/javacomm/#L3.2
    0
  8. eclipsia
     
    Bonjour,
    Il faut juste copier dans le bon emplacement que je l'ai déjç te donner.Pour faire une vérification tu dois aller dans ton projet au niveau d'Eclipse et tu cherches dans les librairie JRE s'il y'a comm.jar si tu le trouve alors c bon
    Pour le code que j'itulise:
    Afficher la liste des ports disponibles dans la machine:

    package Commande;

    import java.io.*;
    import java.util.*;
    import javax.comm.*;

    public class affichePort {

    private Enumeration listPort;
    private CommPortIdentifier IdPort;
    private SerialPort portSerie;
    public affichePort()
    {
    listPort = CommPortIdentifier.getPortIdentifiers();
    System.out.println("Listage des ports trouvés:" );
    System.out.print("List des ports disponibles sur la machine windows:\n");
    while (listPort.hasMoreElements()) {
    IdPort = (CommPortIdentifier) listPort.nextElement();
    if (IdPort.getPortType() == CommPortIdentifier.PORT_SERIAL) {
    System.out.println(IdPort.getName());
    }
    }
    }

    }

    Communique avec le port:

    package Commande;

    //import gnu.io.*;
    import javax.comm.*;
    import javax.swing.JOptionPane;
    import java.io.*;
    import java.util.*;

    public class communiquePort {
    //déclarration des variables
    private Enumeration listPort;
    private CommPortIdentifier IdPort;
    private SerialPort portSerie;
    BufferedReader in;
    OutputStream out;

    /**
    * Fonction:Conversion du code ASCII
    * @param ascii
    * @return
    */
    public static String charOf(int ascii)
    {
    byte[] b=new byte[]{(byte)ascii};
    String c=new String(b);
    return c;
    }
    /**
    * Constructeur qui permet de communiquer avec un port donné comme paramêtre
    * @param Port
    */
    //Créer un constructeur
    public communiquePort(String Port)
    {
    listPort = CommPortIdentifier.getPortIdentifiers();
    while (listPort.hasMoreElements()) {
    IdPort = (CommPortIdentifier) listPort.nextElement();
    if (IdPort.getPortType() == CommPortIdentifier.PORT_SERIAL)
    {
    if (IdPort.getName().equals(Port))
    {
    System.out.println("Le port: "+IdPort.getName()+" est bien trouvé");
    try {
    //ouverture du port série:
    /**
    * Ouverture du port
    */
    IdPort=CommPortIdentifier.getPortIdentifier(Port);
    portSerie=(SerialPort)IdPort.open("Envoi",2000);
    System.out.println("Ouverture du port......");
    /**
    * Configuration du port
    */
    portSerie.setSerialPortParams(9600,
    SerialPort.DATABITS_8,
    SerialPort.STOPBITS_1,
    SerialPort.PARITY_NONE);
    System.out.println("Configuration du port détecté\n Vitesse: "+portSerie.getBaudRate()+"\n Data bit: "+portSerie.getDataBits()+"\n Stop bit: "+portSerie.getStopBits()+"\n Parité: "+portSerie.getParity());
    /**
    * Communication avec la pointeuse
    */
    //pour lire et écrire avec des streams:
    in=new BufferedReader(new InputStreamReader(portSerie.getInputStream()));
    out = portSerie.getOutputStream();
    //Tester la lecture/écriture sur le port série
    //La trame à envoyer
    String trame="La trame utilisée et qui ça depend su terminal";
    System.out.println("La trame envoyée est: "+trame);
    byte[] b = trame.getBytes();
    System.out.println(b);
    out.write( b, 0 , b.length );
    System.out.println("Conversion du trame en byte: "+trame.getBytes());
    /*System.out.println(trame.getBytes());
    System.out.println(trame.getBytes());*/
    int i=in.read();
    String reponse=in.readLine();
    System.out.println("La réponse est: "+reponse+" nbr: "+i);
    /**
    * fermeture
    */
    in.close();
    out.close();
    portSerie.close();

    }
    catch (Exception e) {System.out.println(e.getMessage());}
    }
    }
    }

    }
    }

    Menu princimal pour l'appel ç ces classes:

    package Commande;

    public class Menu
    {
    public static void main(String[] args)
    {
    affichePort aP=new affichePort();
    communiquePort cP=new communiquePort("Le port disonible sur la machine");
    }
    }

    Pour moi c tous ce que je fais et ça marche très bien.

    Rq:Tu travailles avec quel version de java comm et sous quel IDE?
    Dans tous les cas j'attends ta réponse.
    0
  9. eclipsia
     
    Il faut juste copier dans le bon emplacement que je l'ai déjç te donner.Pour faire une vérification tu dois aller dans ton projet au niveau d'Eclipse et tu cherches dans les librairie JRE s'il y'a comm.jar si tu le trouve alors c bon
    Pour le code que j'itulise:
    Afficher la liste des ports disponibles dans la machine:

    package Commande;

    import java.io.*;
    import java.util.*;
    import javax.comm.*;

    public class affichePort {

    private Enumeration listPort;
    private CommPortIdentifier IdPort;
    private SerialPort portSerie;
    public affichePort()
    {
    listPort = CommPortIdentifier.getPortIdentifiers();
    System.out.println("Listage des ports trouvés:" );
    System.out.print("List des ports disponibles sur la machine windows:\n");
    while (listPort.hasMoreElements()) {
    IdPort = (CommPortIdentifier) listPort.nextElement();
    if (IdPort.getPortType() == CommPortIdentifier.PORT_SERIAL) {
    System.out.println(IdPort.getName());
    }
    }
    }

    }

    Communique avec le port:

    package Commande;

    //import gnu.io.*;
    import javax.comm.*;
    import javax.swing.JOptionPane;
    import java.io.*;
    import java.util.*;

    public class communiquePort {
    //déclarration des variables
    private Enumeration listPort;
    private CommPortIdentifier IdPort;
    private SerialPort portSerie;
    BufferedReader in;
    OutputStream out;

    /**
    * Fonction:Conversion du code ASCII
    * @param ascii
    * @return
    */
    public static String charOf(int ascii)
    {
    byte[] b=new byte[]{(byte)ascii};
    String c=new String(b);
    return c;
    }
    /**
    * Constructeur qui permet de communiquer avec un port donné comme paramêtre
    * @param Port
    */
    //Créer un constructeur
    public communiquePort(String Port)
    {
    listPort = CommPortIdentifier.getPortIdentifiers();
    while (listPort.hasMoreElements()) {
    IdPort = (CommPortIdentifier) listPort.nextElement();
    if (IdPort.getPortType() == CommPortIdentifier.PORT_SERIAL)
    {
    if (IdPort.getName().equals(Port))
    {
    System.out.println("Le port: "+IdPort.getName()+" est bien trouvé");
    try {
    //ouverture du port série:
    /**
    * Ouverture du port
    */
    IdPort=CommPortIdentifier.getPortIdentifier(Port);
    portSerie=(SerialPort)IdPort.open("Envoi",2000);
    System.out.println("Ouverture du port......");
    /**
    * Configuration du port
    */
    portSerie.setSerialPortParams(9600,
    SerialPort.DATABITS_8,
    SerialPort.STOPBITS_1,
    SerialPort.PARITY_NONE);
    System.out.println("Configuration du port détecté\n Vitesse: "+portSerie.getBaudRate()+"\n Data bit: "+portSerie.getDataBits()+"\n Stop bit: "+portSerie.getStopBits()+"\n Parité: "+portSerie.getParity());
    /**
    * Communication avec la pointeuse
    */
    //pour lire et écrire avec des streams:
    in=new BufferedReader(new InputStreamReader(portSerie.getInputStream()));
    out = portSerie.getOutputStream();
    //Tester la lecture/écriture sur le port série
    //La trame à envoyer
    String trame="La trame utilisée et qui ça depend su terminal";
    System.out.println("La trame envoyée est: "+trame);
    byte[] b = trame.getBytes();
    System.out.println(b);
    out.write( b, 0 , b.length );
    System.out.println("Conversion du trame en byte: "+trame.getBytes());
    /*System.out.println(trame.getBytes());
    System.out.println(trame.getBytes());*/
    int i=in.read();
    String reponse=in.readLine();
    System.out.println("La réponse est: "+reponse+" nbr: "+i);
    /**
    * fermeture
    */
    in.close();
    out.close();
    portSerie.close();

    }
    catch (Exception e) {System.out.println(e.getMessage());}
    }
    }
    }

    }
    }

    Menu princimal pour l'appel ç ces classes:

    package Commande;

    public class Menu
    {
    public static void main(String[] args)
    {
    affichePort aP=new affichePort();
    communiquePort cP=new communiquePort("Le port disonible sur la machine");
    }
    }

    Pour moi c tous ce que je fais et ça marche très bien.

    Rq:Tu travailles avec quel version de java comm et sous quel IDE?
    Dans tous les cas j'attends ta réponse.
    0
  10. batman68 Messages postés 101 Statut Membre 22
     
    Salut,

    Je travail avec netbeans et j'utilise javax.comm for JDK118 comme librairie.

    Et elle s'affiche bien dans mes ressources du projet et je peut y voir toute les classes et méthodes

    Mais comme dit précédemment j'utiliste l'application CDC sur un PDA equiper de windows CE.
    Et lorsque je fait la meme application en standart sur le PC sa fonctionne

    Donc je pense que sa vient du fait que sur le PDA il ne trouver pas le fichier alors qu'il est ds les ressource du projet.
    Alors je ne c'est pas si il faut copier les fichier de javax.comm for JDK118 ds le PDA ou encor autre chose

    merci
    a+
    0
    1. Dodger
       
      @batman68: Je sais que ça fait longtemps...mais si tu es toujours bloqué, je pense que j'ai la solution.

      Le pb c'est que tu utilises la class Win32Driver qui comme son nom l'indique ne fonctionne que sous windows xp/vista.
      Pour un pocketPC/WinCe/windows mobile il faut utiliser WCECommDriver.

      Tu reprends ton prog d'avant et tu changes :

      import gnu.javax.comm.wce.*;

      WCECommDriver wceDriver= new WCECommDriver();
      wceDriver.initialize();

      J'utilise aussi la superbe MV de Mysaifu. Penses bien à ajouter le jar comm dans le classpath :
      Mysaifu JVM\jre\lib\ext\javaxcomm.jar

      Moi ça marche bien sur mon qtek9100 sous windows mobile 5.0. Je vais essayer ce soir sur mon iPaq3850 sous pocketPC 2003.

      voilà

      a+
      0
      1. batman68 Messages postés 101 Statut Membre 22 > Dodger
         
        Merci beaucoup a toi !

        tu ma sauver !

        enfaite je n'avais pas la bonne api javaxcomm !
        0
  11. aymen2 Messages postés 14 Statut Membre 1
     
    les amis jai un autre solution pour le fichierwin32com. dll et le javax.comm.properties vous pouver les metre dans le répertoire courant et ca marche tres bien j'ai travailler avec le jcreator et netbeans
    bien sur après ajouter l'API .jar le code affiche les port disponible sur la machine
    mon problème maintenant c'est comment je peut lires a partir d'un com
    mon aplication doit lire des 5 mot différent et selon c'est mots elle doit elle doit faire d'autre action
    merci de m'aider
    0
  12. flowrs Messages postés 97 Statut Membre 1
     
    Bonjour tt le monde
    je salue tt d'abords tous les gens qui on participé dans cette discussion..... vous vous êtes très très bien entraidez.
    En faite actuellement je travaille sur le projet sujet de cette duscussion et je trouve un problème
    j'ai du mal à compiler dans la machine virtuelle du PDA (Mysaidu)
    quelqu'un pourait me dire les étapes à suivre pour compiler dans JVM du PDA.
    SVP c'est un peu urgent et je serai très reconnaissante.
    0
  13. BadGuitarist Messages postés 373 Statut Membre 27
     
    Bonsoir Flowrs,

    Que veux-tu dire par : compiler dans la JVM du PDA ?

    Sur ton poste de développement (PC), tu télécharges la JVM Mysaidu et tu compiles ton projet.
    Tu le déploies ensuite sur ton PDA et ... ça devrait marcher.
    0
  14. flowrs Messages postés 97 Statut Membre 1
     
    Merci BadGuitarist pour ta réponse

    en faite j'avais compiler le programe sur PC (netbeans) , j'ai généré le .jar du projet
    le probléme c'est lorsque j'essaie de l'exécuter dans le JVM, une erreur dit que le fichier projet.jar est introuvable!!!
    ou deverais mettre .jar dans la JVM
    et je veux comùpiler un code java (avec des classes méthode main...)^dans la JVM, comment devrais -je procéder
    Merci encore une fois
    0
    1. dodger
       
      As tu bien sélectionner jar comme type d'application dans la combobox ?
      Si ça ne marche pas, essaie d'ajouter ton jar dans le classpath.
      0
  15. dpassyann
     
    Ajouter comm.jar dans le c:\Windows\System32
    0
  16. Akrouti Ezzeddin Messages postés 63 Statut Membre
     
    Merci!!!
    0