L'API Java Comm

Fermé
eclipsia - 25 févr. 2009 à 10:18
Akrouti Ezzeddin Messages postés 50 Date d'inscription samedi 26 novembre 2011 Statut Membre Dernière intervention 31 mai 2012 - 28 mai 2012 à 07:47
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.
A voir également:

16 réponses

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
batman68 Messages postés 100 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 7 septembre 2012 22
6 avril 2009 à 14:12
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
eclipsia > batman68 Messages postés 100 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 7 septembre 2012
6 avril 2009 à 17:10
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
batman68 Messages postés 100 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 7 septembre 2012 22 > eclipsia
6 avril 2009 à 19:10
Non je bien mit les fichier dans le dossier java/jre dans program files.

dsl si je me suis mal exprimé
0
batman68 Messages postés 100 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 7 septembre 2012 22
8 avril 2009 à 13:21
Svp jai besoin d'aide
1
aymen2 Messages postés 12 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 15 mai 2009 1
28 mars 2009 à 18:16
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
batman68 Messages postés 100 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 7 septembre 2012 22
30 mars 2009 à 15:23
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
batman68 Messages postés 100 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 7 septembre 2012 22
6 avril 2009 à 15:28
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
Mauvais import. :)
0
batman68 Messages postés 100 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 7 septembre 2012 22
7 avril 2009 à 10:07
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
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
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
batman68 Messages postés 100 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 7 septembre 2012 22
8 avril 2009 à 18:41
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
@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
batman68 Messages postés 100 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 7 septembre 2012 22 > Dodger
5 mai 2009 à 09:04
Merci beaucoup a toi !

tu ma sauver !

enfaite je n'avais pas la bonne api javaxcomm !
0
aymen2 Messages postés 12 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 15 mai 2009 1
8 avril 2009 à 19:01
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
flowrs Messages postés 80 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 14 mars 2012 1
12 janv. 2010 à 08:09
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
BadGuitarist Messages postés 367 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 20 octobre 2013 27
13 janv. 2010 à 23:52
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
flowrs Messages postés 80 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 14 mars 2012 1
14 janv. 2010 à 02:05
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
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
Ajouter comm.jar dans le c:\Windows\System32
0
Akrouti Ezzeddin Messages postés 50 Date d'inscription samedi 26 novembre 2011 Statut Membre Dernière intervention 31 mai 2012
28 mai 2012 à 07:47
Merci!!!
0