problème ouverture de port série
Bonjour,
J'ai fait une interface avec deux zones de texte, l'une pour réceptionner les données reçues par le port série COM1 provenant d'un autre ordinateur, et l'autre pour écrire le texte à envoyer.
Pour ce faire j'ai créé une classe Interface qui fait appel à une classe que j'ai nommée comrs232 qui me permet de générer un objet SerialPort avec deux méthodes : une d'écriture, l'autre de lecture.
Mon problème est que il n'y a pas ouverture du port série et le programme rentre en exception.
Voici mes codes :
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 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
|
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class interfacemicroordii extends JFrame
{
private Container contener; //espace de la fénêtre
private JTextArea ZoneDonnees;
private JTextArea ZoneEmission;
private JButton Bc; //bouton transfert
private JMenuItem b2; //export liste des data
private comrs232 coco;
public interfacemicroordii()
{
//constuction des zones de texts avec l'autorisation d'écrire
ZoneDonnees = new JTextArea("");
ZoneDonnees.setEditable(true);
ZoneEmission = new JTextArea("");
ZoneEmission.setEditable(true);
Bc = new JButton("Transfert");
//construction des JMenuItem du menu
b2 = new JMenuItem("Exporter les données");
//dimension et nom de la fenetre
setTitle("Interface micro-ordi");
setSize(500,500);
//prise du container par la fenetre
contener = this.getContentPane();
//Zone de text
JPanel p01 = new JPanel();
p01.setLayout(new GridLayout(1,2,20,20));
JPanel p11 = new JPanel();
p11.setLayout(new BorderLayout());
p11.add(new JLabel("Données envoiées"),"North");
p11.add(ZoneDonnees,"Center");
JPanel p21 = new JPanel();
p21.setLayout(new BorderLayout());
p21.add(new JLabel("Message reçu"),"North");
p21.add(ZoneEmission,"Center");
p01.add(p11);
p01.add(p21);
//Bouttons d'actions
JPanel p12 = new JPanel();
p12.add(Bc);
//Le menu
JMenu menu = new JMenu("Menu");
//menu.addSeparator();
menu.add(b2);
//Bar outil où l'on met le menu
JMenuBar mbar = new JMenuBar();
mbar.add(menu);
setJMenuBar(mbar);
//Ajout au Contener des differant panneaux
contener.add(p01,"Center"); //zone de text
contener.add(p12,"South"); //bouttons de cryptage et decryptage
//création de l'objet de comm
coco = new comrs232();
//mise en mode lecture de coco permanent
ZoneDonnees.setText(ZoneDonnees.getText()+coco.lire());
//Action liees au Bc
ActionListener g = new ActionListener() //classe interne
{
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if(source==Bc)
{
coco.ecrire(ZoneEmission.getText());
}
}
};
ActionListener mm = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource() instanceof JMenuItem)
{
String arg = e.getActionCommand();
System.out.println(arg);
if(arg.equals(arg))
{
try
{
PrintWriter sortie = new PrintWriter(
new BufferedWriter(
new FileWriter("Les donnees.txt")));
sortie.println(ZoneDonnees.getText());
sortie.close();
}
catch(IOException eee){System.out.println("exeption");}
}
}
}
};
//Ecouteur
//Bc.addActionListener(g);
b2.addActionListener(mm);
}
} |
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 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
|
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.comm.*;
import com.sun.comm.Win32Driver;
import java.util.*;
public class comrs232
{
private SerialPort port;
private CommPortIdentifier portId;
private InputStream in; //flux de entrée
private OutputStream out; //flux de sortie
public String message_recu;
public comrs232()
{
//initialisation du driver
Win32Driver w32Driver = new Win32Driver();
w32Driver.initialize();
//récupération du port
try{
portId=CommPortIdentifier.getPortIdentifier("COM1");
}
catch(NoSuchPortException ex){}
try {
port=(SerialPort)portId.open("comrs232", 10000);
}
catch (PortInUseException ex) {System.out.println("ex1");}
//paramétrage du port et com en flux
try{
port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
//paramétre de controle du flux, ici pas de controle
//il exist d'autre mode où il y a des controle sur RTS et CTS
port.setSerialPortParams(9600, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
catch (UnsupportedCommOperationException ex){System.out.println("ex2");}
}
public void ecrire (String message_envoye)
{
//les Stream sont des données en bytes donc pour envoyer un message il
//faut convertir une chaine de charraters en une suite de int or cette
//transformation est réalisable charracter par charracter
char tabmessage[]; //tableau de char
int i;
//dimensionnement du tableau et remplissage
int longmessage = message_envoye.length();
tabmessage = new char[longmessage];
message_envoye.getChars(0,longmessage,tabmessage,0);
for (i=1; i==longmessage; i++)
{
try {
out = port.getOutputStream();
out.write((int)tabmessage[i]); //on envoie byte par byte
}
catch (IOException ex) {System.out.println("ex3");}
}
}
public String lire ()
{
BufferedReader bufRead;
try {
in = port.getInputStream();
//on écrit les bytes entrant dans un bufferRead
//puis on transforme les données en bytes en string
bufRead = new BufferedReader(new InputStreamReader(in));
//attention il peut y avoir des problemes s'il y a plus
//d'une ligne
message_recu = bufRead.readLine().trim();
}
catch (IOException ex) {System.out.println("ex4");}
return message_recu;
}
} |
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
|
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.comm.*;
import com.sun.comm.Win32Driver;
import java.util.*;
import java.util.Enumeration.*;
public class testinterface
{
public static void main(String[] args)
{
interfacemicroordii fuf = new interfacemicroordii();
fuf.setVisible(true);
fuf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
} |
Voilà, j'espère que vous pourrez m'aider.
Philippe.
com.sun.comm.Win32Driver;
j'ai téléchargé l'API de communication JAVA : comm.jar sur le site de sun :
http://java.sun.com/products/javacomm/index.jsp
mais aucune trace de com.sun.comm.Win32Driver
sauriez vous où je pourrais trouver cette librairie afin de communiquer avec mon port sérial sur Window XP ??
merci
El Principe Valium