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 :

Console : readPassword et readLine


Sujet :

Langage Java

  1. #1
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut Console : readPassword et readLine
    Bonjour,

    Je suis en train de travailler sur un projet qui utilise la console (System.console()) comme interface.

    Les méthodes readPassword et readLine sont massivement utilisées pour demander des informations à l'utilisateur.

    Malheureusement il se peut qu'une question vienne en interrompre une autre (moins prioritaire).
    Quand cela arrive, j'affiche un message informant l'utilisateur de la question à répondre de suite et quand il a saisit la réponse, la question précédente est posée à nouveau.

    Tout fonctionne à merveille tant que le type de question (normale / password) n'est pas mélangé.

    Quand une question 'Password' prioritaire arrive alors que l'utilisateur répondait à une question classique, il fournit son mot de passe en clair et en plus lisible sur l'écran...

    Existe-t-il un moyen pour forcer la console à interrompre la saisie en cours, ou bien une ruse pour simuler un retour chariot afin de faire terminer la méthode readLine?

    D'avance, merci

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    J'apporte une petite précision tout de même.

    Lorsque j'ai dit:
    j'affiche un message informant l'utilisateur...
    En fait je trichais déjà un peu en utilisant le System.out.print au lieu du System.console().format...

    Ce point serait corrigé dans le même temps s'il existe un moyen de forcer le retour du readLine de la console...

  3. #3
    Membre confirmé Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Points : 558
    Points
    558
    Par défaut
    Je ne suis pas suffisament spécialiste pour savoir répondre directement à la question mais je vais répondre par une autre question.

    N'est ce pas déroutant (voir dangereux) pour un utilisateur de saisir une réponse et que la question change en cours de route.

    D'un point de vue personnel, dans une application, j'ai horreur qu'une pop-up s'ouvre et prenne le focus en demandant une info alors que j'étais en train de faire autre chose.
    Cela m'est déjà arrivé plusieurs fois qu'un programme en tache de fond prenne le controle pendant que j'étais en train de saisir un mot de passe ailleurs. Résultat : une partie du mot de passe s'affiche en clair dans la fenêtre venant de s'ouvrir (le temps que je me rende compte que le focus à changé d'endroit tout seul).
    Librairie d'accès LDAP en Java : LdapBeans
    et pensez au tag

  4. #4
    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,

    Citation Envoyé par Mobius Voir le message
    N'est ce pas déroutant (voir dangereux) pour un utilisateur de saisir une réponse et que la question change en cours de route.
    idem demander un truc pendant que l'utilisateur depond a une question c'est .. pas pratique pour l'utilisateur qui doit effacer ce qu'il etait en train d'ecrire pour retaper la bonne reponce a la place, puis retaper le meme debut de reponce ..

    de plus je ne pence pas que cela soit fesable..

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Alors, pour la question de fond, je suis d'accord avec toi, c'est déroutant d'avoir un changement de question pendant la saisie de la réponse.
    Mais dans mon cas, cela ne sera pas génant (selon moi).
    d'une part, parce que rien ne sera plus prioritaire que la saisie d'un mot de passe (donc aucune interruption de la saisie d'un MdP et donc pas de saisie en clair)

    D'autre part, dans la pratique voilà comment ça se passe:

    Un interpréteur de commande attend la prochaine saisie de l'utilisateur. (readLine)
    Dès qu'il la reçoit, il la parse, la traite (insulte l'utilisateur s'il a mal saisit) puis attend la prochaine saisie (readLine à nouveau).

    Jusque-là, c'est une console classique.
    Les commandes peuvent être des requêtes vers un serveur et sont donc traitées de manière asynchrone. Dans ce cas, l'interpréteur de commande reprend la main et demande une nouvelle commande à l'utilisateur pendant que le serveur traite la requête.
    Là, le serveur peut poser une question à l'utilisateur et il me paraît absurde de devoir attendre que l'utilisateur saisisse une nouvelle commande pour pouvoir lui poser la question.

    Ce qui me gène réellement, c'est cette demande perpétuelle de l'interpréteur qui monopolise la console.
    J'aimerais pouvoir interrompre cette demande au besoin.

    Ainsi, seule l'écriture de commande pourrait être interrompu, et non la réponse à une question.

    Après, si une solution de contournement se présente, je suis preneur. Le mécanisme que j'ai décrit n'est pas figé du tout, je peux le faire voler en éclat si besoin!

  6. #6
    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
    la la seul solution que je vois c'est de ne pas rendre la main tant que la commande n'est pas fini ..

  7. #7
    Membre confirmé Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Points : 558
    Points
    558
    Par défaut
    Ne peux tu pas vérifier que l'utilisateur n'est pas en train de saisir une commande ?
    S'il a commencé a saisir quelque chose tu le laisse terminer.
    Librairie d'accès LDAP en Java : LdapBeans
    et pensez au tag

  8. #8
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Merci de vos réponses.

    Malheureusement, je ne peux pas détecter que l'utilisateur est en pleine saisie. Le reader de la console n'est alimenté qu'une fois que l'utilisateur a tapé un retour chariot.

    Attendre que la commande soit terminée n'est pas une solution car un évènement extérieur (trigger ou command d'un autre utilisateur) peut aussi déclencher une question sur la console. Et là, c'est complètement imprévisible.

    Je commence à m'orienter sur une autre solution:
    Ne plus donner automatiquement la main à l'interpréteur, mais ne lui donner que lorsque l'utilisateur appuie sur entrée.

    Ainsi, le mode courant sera un mode 'attente' qui pourra être interrompu:
    - par le serveur lorsqu'il pose une question,
    - par l'utilisateur lorsqu'il tape un retour chariot pour basculer en mode commande.

    Reste à voir si c'est faisable.

  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
    oui ça, ça devrait être faisable.
    par contre tu auras le meme probleme si l'utilisateur passe en mode commande et qu'une commande demande quelque chose :s

  10. #10
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Non, car je pensais ne plus interrompre une saisie.

    Je considère que lorsque l'utilisateur bascule en mode commande, la saisie de la commande se fera en un temps limité (de l'ordre de la minute au plus).

    Donc les questions pourront attendre.

  11. #11
    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
    haa ok

    du coup c'est plus simple est totalement faisable.

    il "suffit" de faire les readLine/readPassword que sur demande et plus en boucle

Discussions similaires

  1. Eviter string null dans console.ReadLines()
    Par shimomura22 dans le forum C#
    Réponses: 2
    Dernier message: 19/01/2011, 20h43
  2. probléme avc console.readline()
    Par dv-2008 dans le forum VB.NET
    Réponses: 7
    Dernier message: 10/03/2008, 00h33
  3. [monodevelop] problem de Console.ReadLine()
    Par menuge dans le forum MonoDevelop
    Réponses: 4
    Dernier message: 11/09/2006, 15h50
  4. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  5. Editeur en mode console
    Par logramme dans le forum C
    Réponses: 5
    Dernier message: 11/06/2002, 13h23

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