Rechercher : dans
Par :

L'API Java Comm

Dernière réponse le 5 mai 2009 à 09:04:33 eclipsia, le 25 fév 2009 à 10:18:54 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « L'API Java Comm » dans :
2 bons livres pour Java et C++ VoirPour ce qui est de l'api java, pas besoin d'aller chercher loin, le site de sun. Néanmoins, voici un bon livre "Thinking in java" de Bruce Eckels, c'est le meilleur de tout ce que j'ai lu sur java et je le conseille vivement. Auparavant, il avait...
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Java - L'API JDBC VoirIntroduction à JDBC La technologie JDBC (Java DataBase Connectivity) est un ensemble de classes permettant de développer des applications capables de se connecter à des serveurs de bases de données (SGBD). L'accès aux bases de données avec...
J2EE - Java 2 Enterprise Edition VoirIntroduction au Java Framework Le «Java Framework» (Java 2 Platform) est composé de trois éditions, destinées à des usages différents : J2ME : Java 2 Micro Edition est prévu pour le développement d'applications embarquées, notamment sur des...
Introduction à RMI (Remote Method Invocation) VoirIntroduction à RMI RMI (Remote Method Invocation) est une API Java permettant de manipuler des objets distants (c'est-à-dire un objet instancié sur une autre machine virtuelle, éventuellement sur une autre machine du réseau) de manière...

1

aymen2, le 28 mar 2009 à 18:16:14

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

Répondre à aymen2

2

batman68, le 30 mar 2009 à 15:23:56

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 ?

Répondre à batman68

3

eclipsia, le 1 avr 2009 à 10:58:31

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.

Répondre à eclipsia

4

batman68, le 6 avr 2009 à 14:12:23

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 ?

Répondre à batman68

6

eclipsia, le 6 avr 2009 à 17:10:27

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

Répondre à eclipsia

8

batman68, le 6 avr 2009 à 19:10:57

Non je bien mit les fichier dans le dossier java/jre dans program files.

dsl si je me suis mal exprimé

Répondre à batman68

5

batman68, le 6 avr 2009 à 15:28:58

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

Répondre à batman68

7

biboo, le 6 avr 2009 à 17:12:03

Mauvais import. :)

Répondre à biboo

9

batman68, le 7 avr 2009 à 10:07:31

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.g­etCrossPlatformLookAndFeelClassName());
} 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 : http://christophej.developpez.com/tutoriel/java/javacomm/#L3.2

Répondre à batman68

10

batman68, le 8 avr 2009 à 13:21:19

Svp jai besoin d'aide

Répondre à batman68

11

eclipsia, le 8 avr 2009 à 16:31:26

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.

Répondre à eclipsia

12

eclipsia, le 8 avr 2009 à 16:32:55

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.

Répondre à eclipsia

13

batman68, le 8 avr 2009 à 18:41:34

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+

Répondre à batman68

15

Dodger, le 23 avr 2009 à 11:52:53

@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+

Répondre à Dodger

16

 batman68, le 5 mai 2009 à 09:04:33

Merci beaucoup a toi !

tu ma sauver !

enfaite je n'avais pas la bonne api javaxcomm !

Répondre à batman68

14

aymen2, le 8 avr 2009 à 19:01:46

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

Répondre à aymen2
Collection CommentÇaMarche.net