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 :

Initialiser getOutputStream() ;


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Par défaut Initialiser getOutputStream() ;
    Salut a vous!

    J'aurais une petite question!

    Y'a t'il moyen d'initialiser un getOutputStream() pour que ce ne sois pas la console mais un autre PrintWriter que l'on as précedement défini?

    Pour info, le pw creer est un textArea

    Merci par avance de votre réponse


    [EDIT]Je travail en swing[/EDIT]

  2. #2
    Membre expérimenté Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Par défaut
    Il y a un truc que je ne comprends pas. Que veux tu faire exactement.
    Moi ce que je comprend c'est que tu veux recuperer les donnees de ton textarea et les envoyer par ta socket c ca?
    Ou plutot recuperer les donnees recu par ta socket et les mettre dans un textarea ??
    Dans les 2 cas je crois que tu veux te compliquer la tache...reexplique ton pb stp.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Par défaut
    Je veux recuperer les donnees recu par ta socket et les mettre dans un textarea qui est transformé en printwriter




    merci d'avance

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Par défaut
    Hummm je devrait peux etre recreer un sujet et changer de nom, en mettre un plus explicite

  5. #5
    Membre expérimenté Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Par défaut
    Pourquoi utiliser ton textarea en printwriter ??
    Pourquoi ne pas tout simplement afficher ton texte dans ton textarea.
    En fait quand tu fais un println ou print de ce que tu recois ca n'affiche rien c'est ca ??

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Par défaut
    alors coté serveur j'ai :

    versClient=new PrintWriter(new OutputStreamWriter(client.getOutputStream()),true);

    et utilisation versClient.println("blablabla");

    et coté client j'ai un textarea transformé en Printwriter pour des soucis de praticité

    Mais je voudrai que lorsque du coté serveur j'utilise versClient, ca affiche dans le PrintWriter qui est en faite le textArea




    Merci a toi

  7. #7
    Membre expérimenté Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Par défaut
    En fait tu voudrais que l'affichage se face de facon automatique dans ton textarea des que tu recois un fichier.
    Mais il me semble que ca ne se fera pas aussi facilement. Il va quand meme falloir que tu scrute l'arrivee d'une trame et que tu demande de l'afficher dans ton textarea.
    Mais je ne suis pas sure. Si c'est de l'affichage dyamique que tu veux comme je pense je ne sais pas faire.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Par défaut
    Donc il n'y as pas moyen de changer la "destination" du getOutputStream() ? et donc le mettre mon printwriter (de textarea) directement

    {edit} parceque en faite, le truc c'est que ca les affiche dans la console mes messages{/edit}

  9. #9
    Membre expérimenté Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Par défaut
    Tu peux montrer la partie du code ou tu fais de ton textarea un printWriter et le traitement que tu fais quand tu recois un message de ta socket (si tu fais un traitement).

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Par défaut
    ALors :
    PrintWriter pw = new PrintWriter(new TextArea(textArea));

    La class TextArea :
    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
     
    import java.io.OutputStream;
    import javax.swing.text.JTextComponent;
     
    public final class TextArea extends OutputStream {
      private JTextComponent out;
     
      public TextArea(JTextComponent out) {
        super();
     
        if (out == null) {
          throw new IllegalArgumentException("out is null!");
        }
     
        this.out = out;
      }
     
      public void write(byte[] b) {
        write(b, 0, b.length);
      }
     
      public void write(byte[] b, int off, int len) {
        byte[] bArray = new byte[len];
        System.arraycopy(b, off, bArray, 0, len);
        out.setText(out.getText() + new String(bArray));
        out.setCaretPosition(out.getDocument().getLength());
      }
     
      public void write(int b) {
        out.setText(out.getText() + new String(new byte[] { (byte) b }));
        out.setCaretPosition(out.getDocument().getLength());
      }
    }
    Gentillement donné sur le forum



    En ce qui concerne le traitement, je n'en fai aucun puisque avant de me lancer dans le graphique, cette commande fonctionnait ( juste utiliser le versclient.print("blablalba"); )

  11. #11
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut

    C'est illisible...


    Et j'ai toujours du mal à comprendre ton problème exact... C'est quoi client et entre autre et ce que tu veux en faire...

    a++

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Par défaut
    désolé pour la balise...


    Alors le client se connecte au serveur, a la connection le serveur envoie directement des info a l'aide du versClient (situé sur le serveur). En console ca marchais tres bien, mais penssant a faire un truc un peut mieu, je suis passé en interface graphique. J'ai donc "transformé" un textarea en printwriter (qui marche tres bien par ailleur) mais maintenant, le probleme c'est que les info envoyé a la connection du client, ne sont donc, envoyé toujour vers la console alors que j'aimerai les voir arriver sur mon textArea.

    J'espere m'etre mieu exprimé

  13. #13
    Membre expérimenté Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Par défaut
    Ok mais tu as teste si ta fonction write de ta classse textArea etait appellee quand tu recevais une donnee ??

  14. #14
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Ben comment fait-tu coté client pour écrire le tout dans la console ? Tu récupère l'outputStream de ta socket et tu la recopie dans System.out...

    Ici il faut faire la même chose mais avec ton TextArea/OutputStream :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            OutputStream out = new TextArea( tonTextArea );
            InputStream in = xxxx.getInputStream();
            try {
                byte[] buf = new byte[4096];
                int len;
     
                while ( (len=in.read(buf)) > 0 ) {
                    out.write(buf, 0, len);
                }
     
            } finally {
                in.close();
            }
    Sinon pour en revenir à ta classe TextArea... il y a deux points qui me gène :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out.setText(out.getText() + new String(bArray));
    1./ Ceci est assez lourd en mémoire, car on crée un nouvelle chaine copie de la précédente à chaque fois. Il serait préférable de passer par le Document pour ajouter réellement du texte...


    2./ Contrairement à setText(), la méthode setCaretPosition() n'est pas thread-safe : elle doit être appellé depuis l'EDT (lire : Threads et performance avec Swing par Romain Guy pour plus de détail). Cela peut provoquer des problèmes de mises à jours de l'affichage voir carrément des erreurs. Il faut utiliser SwingUtilities.invokeLate() pour corriger cela...



    Ceci pourrait régler ces petits soucis :
    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
    public final class TextArea extends OutputStream {
        private final JTextComponent out;
        private final Document doc;
     
        public TextArea(JTextComponent out) {
            super();
     
            if (out == null) {
                throw new IllegalArgumentException("out is null!");
            }
     
            this.out = out;
            this.doc = out.getDocument();
        }
     
        public void write(byte[] b) {
            write(b, 0, b.length);
        }
     
        public void write(byte[] b, int off, int len) {
            writeString(new String(b,off,len));
        }
     
        public void write(int b) {
            writeString(new String(new byte[] { (byte) b }));
        }
     
        /**
         * Ecrit une chaine de caractère dans le TextComponent.
         * Cette méthode est thread-safe : le texte sera bien ajouté depuis
         * le thread de l'EDT quel que soit le thread depuis lequel la
         * méthode est appellé...
         * @param text Le texte à ajouter
         */
        public void writeString(final String text) {
            if (SwingUtilities.isEventDispatchThread()) {
                appendText(text);
            } else {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        appendText(text);
                    }
                });
            }
        }
     
        /**
         * Cette méthode ajoute le texte dans le document du composant,
         * et déplace le curseur à la fin de la zone de texte.
         * Cette méthode DOIT impérativement être appellé depuis l'EDT.
         * @param text Le texte à ajouter
         */
        private void appendText(String text) {
            try {
                this.doc.insertString(this.doc.getLength(), text, null);
                this.out.setCaretPosition(this.doc.getLength());
            } catch (BadLocationException e) {
                // Ne devrais jamais arrivé :
                e.printStackTrace();
            }
        }
    }
    a++

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Par défaut
    Merci a vous pour l'aide que vous m'apporter, et merci pour l'amélioration de la class textArea

    En ce qui concerne avant je faisais, coté client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PrintWriter depuisServer;
    depuisServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));


    De plus, j'ai un petit soucis avec ta méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            OutputStream out = new TextArea( tonTextArea );
            InputStream in = xxxx.getInputStream();
            try {
                byte[] buf = new byte[4096];
                int len;
     
                while ( (len=in.read(buf)) > 0 ) {
                    out.write(buf, 0, len);
                }
     
            } finally {
                in.close();
            }
    Mon probleme est le suivant : il va bien ecrire les elements mais je n'arrive pas a le retranscrire en Printwriter, qui me permetrai aussi de mettres les execptions ect ect

    Je vous remercie encore

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Par défaut
    Alors j'ai fais une petite méthode, un peut bidon mais qui marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void recupInfo(PrintWriter out)
    	   {
    	    	   String ligne;
    	    	   try{ 
    	       while ((ligne = depuisServer.readLine()) !=  null)
    	           out.println(ligne);
    	       }
     
    	       catch (IOException e) {out.println(e);}
    	   }
    en l'appelant
    cela me permet d'afficher les infos recuperer de mon serveur sur mon JtextArea voila

    Merci a vous 2 de votre aide
    Et merci pour l'optimisation de la classe TextArea

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

Discussions similaires

  1. [Servlet] Fichiers d'initialisation
    Par david71 dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 03/09/2003, 13h47
  2. Créer et initialiser un composant TStatusBar :help:
    Par James_ dans le forum C++Builder
    Réponses: 10
    Dernier message: 21/08/2003, 08h52
  3. [servlet] initialisation d'objets
    Par tiPouick dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 05/08/2003, 12h12
  4. Initialisation de XMLModule
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 10
    Dernier message: 01/04/2003, 10h08
  5. initialisation Directinput avec delphi
    Par Madmaxx dans le forum DirectX
    Réponses: 1
    Dernier message: 21/02/2003, 17h37

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