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

avec Java Discussion :

While + BufferedReader + readLine() = manque la dernière ligne


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Apprenti Ingé
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Par défaut While + BufferedReader + readLine() = manque la dernière ligne
    Bonjour à tous =)

    Je suis actuellement en train de faire un "client SSH" propre à mes besoin en java. j'utilise la librairie JSch. Pour ceux qui ne connaitraient pas, c'est une librairie qui gère le SSH dans un programme Java. Mon problème ne vient pas de cette librairie :

    Voici un bou de mon code qui se trouve dans une classe heritant de JTextArea :

    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
     
    BufferedReader stdoutReader = null;
    InputStream stdout = null;
     
    stdout = channel.getInputStream();
    stdouReader = new Bufferedreader(new InputStreamReader(stdout));
     
    String line = null;
     
    while ((line = stdoutReader.readLine()) != null) { // Parcours de toutes les ligne du Bufferedreader
     
        this.append(line + "\n");      // Affiche dans le JTextArea
        this.setCaretPosition(this.getText().length()); // Mets le curseur à la fin du texte
     
    }
    Mon problème est que le append affiche tout sauf la dernière ligne. En gros il manque le prompte de la console linux : user@host:~$
    Voyez vous une erreure possible de ma part ? Ou est-ce juste impossible de faire comme ça ?

    Merci d'avance de votre aide !

    Julian

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Je suppose tout simplement que le symbole Dollar n'est pas dans le flux en entré.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Le problème viens du fait que tu utilise BufferedReader + readLine, qui ne te retournera rien pour la ligne du prompt tant qu'il n'y aura pas un retour à la ligne derrière.

    A la place, utilise seulement un Reader, avec sa méthode read() pour récupérer des char[] que tu ajoute progressivement à la fin de ton TextArea.

  4. #4
    Membre averti
    Homme Profil pro
    Apprenti Ingé
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Par défaut
    Merci de ta réponse =)

    Ce qui me parrait bizarre, c'est quand je rentre une commande et que je l'envoie, le prompte apparait après mon texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Blabla du serveur
    // pas de prompte
    ls -l     // Commande que je rentre 
    User@Host:~$ ls -l   // ce qui s'affiche donc ce que je reçois
    total 0 // Resultat de la commande
    -rwx....................
    ..........................
    ..........................
    Donc le prompt est bien dans le flux mais pas au moment souhaité !

    EDIT : Merci tchize_ je vais essayer ça de suite =)

    Julian

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Je l'ai dit et je le répète, readLine ne retournera la ligne que lorsque tu aura atteinds un retour à la ligne.

    Donc quand est dispo dans le buffer

    "User@Host:~$ ls -l\n"

  6. #6
    Membre averti
    Homme Profil pro
    Apprenti Ingé
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Par défaut
    C'est impeccable tout fonctionne comme je veux !

    Merci encore !

    Julian

    EDIT : J'aimerais mettre [RESOLU] dans le titre de mon premier message mais je ne peut l'éditer !

  7. #7
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    il ne faut pas tenter de mettre resolu dans le titre cela ce fait tout seul lorsque tu cliques tu le bouton Résolu qui se trouve en bas après tous les messages de ton post !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [JScrollPane] [JTable] Se placer à la dernière ligne
    Par wishnight dans le forum Composants
    Réponses: 9
    Dernier message: 24/12/2015, 18h42
  2. [JList] rendre visible la dernière ligne ajoutée
    Par Mille sabords dans le forum Composants
    Réponses: 3
    Dernier message: 12/04/2005, 10h32
  3. Réponses: 14
    Dernier message: 30/03/2005, 21h50
  4. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57
  5. l'identifiant unique de la dernière ligne insérée
    Par dim_italia dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2004, 17h55

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