IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

RXTX, port série et PortInUseException


Sujet :

API standards et tierces Java

  1. #1
    Membre régulier Avatar de Sylvain__A_
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2008
    Messages : 100
    Points : 94
    Points
    94
    Par défaut RXTX, port série et PortInUseException
    Bonjour à tous.

    J'ai un petit soucis avec la librairie RXTX qui permet de lire / écrire vers les ports série.

    Je travaille sous Windows.

    Je pense que j'ai correctement installé la librairie, puisque j'ai ça qui s'affiche, et que lors de mes essais, j'ai réalisé le test "listage des ports", et la lib a bien trouvé le port "COM4" sur lequel je voudrais travailler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Stable Library
    =========================================
    Native lib Version = RXTX-2.1-7
    Java lib Version   = RXTX-2.1-7
    J'essaye d'écouter une douchette scanner de code-barre, or mon code lance une exception gnu.io.PortInUseException :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    gnu.io.PortInUseException: Unknown Application
    at gnu.io.CommPortIdentifier.open(CommPortIdentifier.java:354)
    at deviceManager.DeviceManager.connect(DeviceManager.java:76)
    at deviceManager.DeviceManager.main(DeviceManager.java:56)
    Ma méthod main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try
    {
         (new DeviceManager()).connect("COM4");
    }
         catch ( Exception e )
    ...
    La méthode connect :

    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
     
    void connect ( String portName ) throws Exception
    {
        CommPortIdentifier portIdentifier=CommPortIdentifier.getPortIdentifier(portName);
     
        if ( portIdentifier.isCurrentlyOwned() )
        {
            System.out.println("Error: Port is currently in use");
        }
        else
        {
             CommPort commPort = portIdentifier.open( this.getClass().getName(), 2000 );
     
             if ( commPort instanceof SerialPort )
             {
                SerialPort serialPort = (SerialPort) commPort;
                serialPort.setSerialPortParams( 9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE );
     
                InputStream in = serialPort.getInputStream();
     
                serialPort.addEventListener(new SerialReader(in));
                serialPort.notifyOnDataAvailable(true);
     
            }
            else
            {
                System.out.println("Error: Only serial ports are handled by this example.");
            }
        }     
    }

    Donc, je pense qu'il y a quelque chose que je n'ai pas compris.

    En effet, c'est normal que le port soit "InUse", puisque je veux justement l'écouter ...

  2. #2
    Membre régulier Avatar de Sylvain__A_
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2008
    Messages : 100
    Points : 94
    Points
    94
    Par défaut
    En fait ça marche très bien, c'est juste que le portInUse, c'était hyperTerminal

    Donc si vous testez, pensez à fermer hyperTerminal.

    Voici les articles qui m'ont été utile :

    D'une manière générale, les API java.comm et rxtx étant très proche, on peut s'inspirer des exemples de la 1ere pour coder la 2e

    http://www.rxtx.org/, cliquez sur usage, puis "code examples", 5 tutos très précis.

    http://www.captain.at/howto-java-ser...-comm-rxtx.php

    Une intro un peu générale sur java / port série :
    http://en.wikibooks.org/wiki/Serial_...ng/Serial_Java

    http://edn.embarcadero.com/article/31915

    http://www.agaveblue.org/howtos/Comm_How-To.shtml

    Le tuto de developpez :

    http://christophej.developpez.com/tu...java/javacomm/

    Alternatives :

    http://serialio.com/products/serialport/packages.php

    http://alumni.media.mit.edu/~benres/simpleserial/

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Problème de code
    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
    import gnu.io.CommPort;
    	import gnu.io.CommPortIdentifier;
    	import gnu.io.SerialPort;
     
    	import java.io.FileDescriptor;
    	import java.io.IOException;
    	import java.io.InputStream;
    	import java.io.OutputStream;
    	import gnu.io.RXTXCommDriver;
     
    	public class projettuttest
    	{
    	    public projettuttest()
    	    {
    	        super();
    	    }
    //connexion au port:
     
    	    void connect ( String portName ) throws Exception
    	    {
    	        CommPortIdentifier COM7 = CommPortIdentifier.getPortIdentifier(portName);
    	        // si le port est deja connecté:
    	        if ( COM7.isCurrentlyOwned() )
    	        {
    	            System.out.println("Error: Port is currently in use");
    	        }
    	        else
    	        {
    	            CommPort commPort = COM7.open(this.getClass().getName(),2000);
    	            if ( commPort instanceof SerialPort )
    	            {
    	            	//si le port est présent mais pas connecté
    	                SerialPort serialPort = (SerialPort) commPort;
    	                serialPort.setSerialPortParams(57600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
     
    	                InputStream in = serialPort.getInputStream();
    	                OutputStream out = serialPort.getOutputStream();
     
    	                (new Thread(new SerialReader(in))).start();
    	                (new Thread(new SerialWriter(out))).start();
     
    	            }
    	            else
    	            	// si le port n'est pas présent
    	            {
    	                System.out.println("Error: Only serial ports are handled by this example.");
    	            }
    	        }     
    	    }
     
    	    /** */
    	    public static class SerialReader implements Runnable 
    	    {
    	        InputStream in;
     
    	        public SerialReader ( InputStream in )
    	        {
    	            this.in = in;
    	        }
     
    	        public void run ()
    	        {
    	            byte[] buffer = new byte[1024];
    	            int len = -1;
    	            try
    	            {
    	                while ( ( len = this.in.read(buffer)) > -1 )
    	                {
    	                    System.out.print(new String(buffer,0,len));//tampon
    	                }
    	            }
    	            catch ( IOException e )
    	            {
    	                e.printStackTrace();
    	            }            
    	        }
    	    }
     
    	    /** */
    	    public static class SerialWriter implements Runnable 
    	    {
    	        OutputStream out;
     
    	        public SerialWriter ( OutputStream out )
    	        {
    	            this.out = out;
    	        }
     
    	        public void run ()
    	        {
    	            try
    	            {                
    	                int c = 0;
    	                while ( ( c = System.in.read()) > -1 )
    	                {
    	                    this.out.write(c);
    	                }                
    	            }
    	            catch ( IOException e )
    	            {
    	                e.printStackTrace();
    	            }            
    	        }
    	    }
     
    	    public static void main ( String[] args )
    	    {
    	        try
    	        {
    	            new projettuttest().connect("COM7");
    	        }
    	        catch ( Exception e )
    	        {
    	            // TODO Auto-generated catch block
    	            e.printStackTrace();
    	        }
    	    }
    	}

    Voici ce que j'obtient :

    Stable Library
    =========================================
    Native lib Version = RXTX-2.1-7
    Java lib Version = RXTX-2.1-7

    Mais il y a aussi 3 erreurs et je ne trouve pas d'où ça vient :
    at gnu.io.ComPortIdentifier.getPortIdentifier(ComPortIdentifier.java:218)
    at projettuttest.connect(projettuttest.java:21)
    at projettuttest.main(projettuttest.java:110)

    Le port avec lequel je veux communiquer est le Port7 et je n'arrive pas à obtenir ce que je veux avec le programme, je peux juste changer des données de mon appareil en lignes de commande.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rxtx port série bloqué sous linux
    Par Laurent7 dans le forum Général Java
    Réponses: 2
    Dernier message: 02/12/2011, 10h12
  2. [Série] Accès au port série sous linux
    Par ghost dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/10/2007, 11h43
  3. probleme de communication port série
    Par ben23 dans le forum MFC
    Réponses: 8
    Dernier message: 06/02/2004, 16h12
  4. Recherche de l'adresse du port série
    Par StephCal dans le forum Langage
    Réponses: 8
    Dernier message: 07/01/2004, 12h23
  5. Problème avec le port série sous Windows XP
    Par didou2dek dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/09/2003, 20h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo