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

Entrée/Sortie Java Discussion :

Redirection de flux


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut Redirection de flux
    Bonjour,

    Voila, je voulais savoir s'il était possible de rediriger un flux de sortie standard (System.out) non pas vers la console par default mais vers n'importe quel point d'insertion clavier en direct ?
    Comment le faire si c'est possible ou sinon est ce que l'on peut rediriger vers un champs de saisie d'une appli spécifique ?
    J'ai déja essayé System.setOut(PrintStream) mais je ne trouve que des exemples pour envoyer vers un fichier txt.

    Merci d'avance pour vos réponses.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Il devrait être possible d'implémenter un PrintStream qui stocke les octets qu'il reçoit dans un buffer, en attendant d'être flushé.

    Quand il est flushé, il transforme ces octets en un String, et utilise SwingUtilities.invokeAndWait() pour mettre un champ texte à jour avec ce String.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut
    Cette méthode SwingUtilities.invokeAndWait() me permettrait d'afficher un string ds un champs texte d'une appli que j'aurai développé.

    Pour être plus clair, je cherche à rediriger mon System.out.println("mon texte") vers l'entrée clavier de n'importe quelle application (notepad,word,champs de saisie d'une page web...).
    Comme lors de l'utilisation d'un lecteur de code barre qui affiche le numéro en direct sur l'entrée clavier...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pour écrire dans une application, je ne vois pas d'autre chose que utiliser Robot, et simuler l'appui de touche :p.

    En ce qui concerne le mécanisme System.out......
    Tu dois d'abord faire un System.setOut(.....), et fournir un PrintStream

    Pour construire ce PrintStream, voici un exemple tiré d'un de mes projets :

    this.out = new PrintStream(new OutputStream()
    {
    public void write(int charInt)
    {
    XXXXXXXXXXX
    }
    }, true);

    Il faut implémenter "public void write(int charInt)"
    Tu récupères caractère par caractère ton System.out.println()

  5. #5
    Membre averti
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut
    Merci pour le Robot, je ne savais pas mais ça marche avec la méthode keyPress(int keycode).

    Par contre je n'arrive pas à convertir ma chaine en caractère propre au clavier (int keycode).
    Et je ne comprend pas trop la façon d'utiliser le PrintStream comme tu l'a décrit ci dessus.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Robot va simuler des appuis de touches du clavier.
    Voir la classe KeyEvent pour les codes de touches.

    Pour le PrintStream :
    System.out est un objet, de type PrintStream
    Cet objet affiche le texte qu'il reçoit par ses méthodes "print" dans la console
    Pour récupérer le texte que tu souhaites afficher en faisant un System.out.println(), il faut remplacer System.out
    Pour cela, tu utilises System.setOut()
    Cette méthode a pour argument un PrintStream, qui va se substituer à System.out
    La classe PrintStream est un OutputStream, mais qui fourni quelques facilités, telles que "println()"
    Il faut donc instancier un nouveau PrintStream afin de pouvoir l'utiliser.
    Le constructeur qui va nous intéresser est celui ci : "PrintStream(OutputStream out, boolean autoFlush)"
    Il nous faut donc aussi instancier un OutputStream.
    Mais on va remplacer la méthode "write(int b)" de cet Output Stream.
    Je réecris le 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
     
    OutputStream os = new OutputStream()
    {
        public void write(int charInt)
        {
            // charInt est un caractère, codé je sais pas trop comment
            // C'est ici que tu récupère 1 par 1 les caractères de ton System.out.println()
        }
    };
     
    PrintStream ps = new PrintStream(os, true);
    // Le PrintStream qui va remplacer l'ancien
    // Le boolean sert à "flush" le flux plus rapidement
     
    System.setOut(ps);
    // Et ici on remplace

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

Discussions similaires

  1. Redirection de flux clavier
    Par TrEiZe85 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 19/10/2007, 23h21
  2. Redirection de flux
    Par Fluxy dans le forum Windows
    Réponses: 2
    Dernier message: 29/05/2007, 19h50
  3. redirection de flux console
    Par xolytem dans le forum C++
    Réponses: 4
    Dernier message: 02/02/2007, 12h24
  4. Redirection du flux d'entree sous linux
    Par Fl4mBy dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 30/08/2005, 15h49
  5. [reseaux] redirection de flux
    Par Olive1808 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 12/08/2002, 09h24

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