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

Langage Java Discussion :

le retour de la fonction read


Sujet :

Langage Java

  1. #1
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut le retour de la fonction read
    Bonjour à tous!

    J'utilise la fonction public int read(byte[] b)throws IOException pour lire des données que m'envoie un onduleur.

    Je voudrais savoir un moyen pour détecter lorsque mon onduleur n'est pas branché et que j'essaie de lire.

    La fonction read nous retourne -1 si notre buffer (ici c'est la variable b)est vide.Mais cette solution ne marche pas non plus.j'ai essayé des gérer les exceptions et rein n'est fait.

    j'utlise l'api RxTx pour communiquer via liaison RS232.

    Quelqu'un aurait il une façon de faire?

    Merci à tous.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Seelass Voir le message
    Mais cette solution ne marche pas non plus.
    Tu peux être plus précis sur ce point? Il n'y a pas 36.000 façons de gérer la lecture d'un inputstream.

  3. #3
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tu peux être plus précis sur ce point? Il n'y a pas 36.000 façons de gérer la lecture d'un inputstream.
    Voici la partie de mon code qui permet de lire un flux
    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
    int carac_lu;
     
    try
    {
    	do
           {
    	 /**
              * read nous renvoie le nombre de caractéres lues
              */
    		  carac_lu = in.read(buffer);
    		   if(carac_lu == -1)
    		    {
    		    	System.out.println("l'onduleur n'est pas présent");
    		    }
    		    chaine_reponse += new String(buffer,0,carac_lu);
     
    	}
     
    	/**
             * Tant que la fin de chaine_reponse ne correspond pas<br>
             * au retour chariot on continue à lire
             */
    while((!chaine_reponse.endsWith("\r")));
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    d'abord, ton code devris faire un break si on rencontre -1.

    Ensuite, -1 signifie fin du stream, je ne pense pas que ca signifie que l'onduleur aie été débranché pour autant.

    Quand tu débranche l'onduleur, read te retourne quoi? As-tu une exception ou autre?

  5. #5
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    catch(IOException erreurIO)
        	{
        		System.out.println(erreurIO.getCause());
        		System.out.println(erreurIO.getMessage());
     
        	}
    voici l'exception que je gère mais lorsque j'éteins l'onduleur et que j'exécute mon programme, je n'ai pas d'exception qui est généré.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    d'abord, si elle déclenche, tu fais un printstacktrace de ton exception , sinon elle est inutile (le message est souvent moins utilie que le stack de l'erreur)


    Maintenant, pour ton problème précis, read retourne quoi? 0?

  7. #7
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    La fonction read si tout se passe bien(cas où l'onduleur est branché) me retourne le nombre de caractère lue.

    Je vous voudrais dans le cas où l'onduleur est débranché afficher un message pour prévenir l'utilisateur de ce problème.

    Merci pour l'aide apportée jusqu'ici;
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    t'as pas répondu, il se passe quoi avec la fonction read quand tu débranche l'onduleur? En fonction de ça, tu pourra déterminer le moyen de détecter le débranchement....

  9. #9
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Bonjour,

    si il est débrancher tu peu quand meme te connecter dessus?
    au quelle cas cela serai plus une exception a la connexion qu'il faudrait gérer

  10. #10
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Quand je le débranche il rentre la fonction read rentre dans une boucle infinie
    si il est débrancher tu peu quand meme te connecter dessus?
    Non je ne peux pas me connecter dessus.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    on va "supposer" (parce que t'as pas répondu à la question) que ca retourne 0. A toit dans ce cas, dans ta boucle, de noter pendant combien de temps tu ne recois rien, et, au bout d'un certain temps (5 secondes par exemple), d'en conclure que c'est débranché.

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je connais pas trop l'api RxTx mais je suppose qu'il y a moyen de mettre un timeout de lecture, de disons 2 secondes.

    A priori, donc, tu mets un timeout avant tout. Puis quand tu fais ton read(), s'il y a un IOException correspondant à un timeout, ça veut sûrement dire que rien n'est branché, et qu'il est temps de le dire à l'utilisateur.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Comme je l'ai dit plus haut read me retourne le nombre de caractére lue, parce que read réussit à bien lire, il me retourne un nombre supérieur à 0. ensuite je crée une chaine du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine_reponse += new String(buffer,0,carac_lu);
    Citation Envoyé par tchize_ Voir le message
    on va "supposer" (parce que t'as pas répondu à la question) que ca retourne 0. A toit dans ce cas, dans ta boucle, de noter pendant combien de temps tu ne recois rien, et, au bout d'un certain temps (5 secondes par exemple), d'en conclure que c'est débranché.
    C'est cela que je veux mettre en code et je ne sais pas où commencer.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    de la manière la plus simple du monde, pour commencer:

    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
     
    long debut = System.getCurrentTimeMillis();
    	do       {
    	 /**
              * read nous renvoie le nombre de caractéres lues
              */
    		  carac_lu = in.read(buffer);
                      long actuel = System.getCurrentTimeMillis();
    		   if(carac_lu == -1)
    		    {
    		    	System.out.println("plus rien à lire");
    		    } else if (carac_lu==0){
                            if (actuel -debut > 6000) // 6 ms
                                System.out.println("débranché");
                        } else
                            debut = actuel; // on réinitialise.
    		    chaine_reponse += new String(buffer,0,carac_lu);
     
    	}
     
    	/**
             * Tant que la fin de chaine_reponse ne correspond pas<br>
             * au retour chariot on continue à lire
             */
    while((!chaine_reponse.endsWith("\r")));

  15. #15
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Merci pour tous

    je vais faire le reste maintenant.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  16. #16
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut
    Je n'ai plus la réponse sous la main, mais en changeant de type de buffer d'entrée, tu peux accéder à d'autres méthodes qui n'existent pas dans ton inputStream.

    A+
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

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

Discussions similaires

  1. [Oracle 9.1] Types de retour d'une fonction PL/SQL
    Par ftrifiro dans le forum PL/SQL
    Réponses: 8
    Dernier message: 12/10/2005, 16h54
  2. Problème avec la fonction read.
    Par Whaouu dans le forum Langage
    Réponses: 10
    Dernier message: 23/09/2005, 10h33
  3. valeur de retour de la fonction "system" en C
    Par benhoeil dans le forum C
    Réponses: 14
    Dernier message: 16/09/2005, 11h30
  4. [langage] problème avec fonction read
    Par domidum54 dans le forum Langage
    Réponses: 2
    Dernier message: 30/03/2004, 20h42
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58

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