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

AWT/Swing Java Discussion :

Ecriture de "LOG" dans JTextArea


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 23
    Points
    23
    Par défaut Ecriture de "LOG" dans JTextArea
    Bonjour,

    Après de multiples tentatives et recherches infructueuses depuis hier, je viens vous demander votre aide...
    J'espère que je poste au bon endroit et que je n'ai pas mal cherché!

    Voici donc mon problème:
    j'ai une fenêtre avec un JTextArea. Je veux faire apparaitre dans cette JTextArea les différentes opérations qui interviennent au cours de l’exécution de l'appli.
    J'avais réussi (non sans mal!) à la faire dans un fichier texte mais apparemment, ça ne suffit pas!

    Pour être plus précis, je déclare et j'instancie ma JTA dans une classe vuePrincipale.(avec Frame, panel...) Je la vois apparaitre mais elle est vide.
    J'arrive à la remplir en écrivant un truc du style:
    *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	public void Ecrire(String TexteAEcrire) {
    		textArea.setText(TexteAEcrire);
    	}
    Par contre, je ne peux appeler cette méthode que dans ma classe VuePrincipale

    J'ai donc créé une autre classe Ecriture mais évidemment, je n'ai pas accès à ma JTextArea pour y écrire.
    Je ne sais pas si je suis assez clair?
    Auriez vous des suggestions pour résoudre ce problème?

    Merci d'avance pour votre aide!

    @+

    Thomas.

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 084
    Points
    7 084
    Par défaut
    Pour commencer, il faudrait savoir si tu utilises une API de log comme java.util.logging ou Log4J ?

    Quoiqu'il en soit je te conseille de travailler avec le document de ton composant texte.

    Ca te premettra également au besoin de le mettre en forme au besoin.
    Ensuite penses à "synchroniser" les accès à ton document. L'idéal étant d'effectuer les ajouts dans l'Event Dispatch Thread d'AWT.

    Tu trouveras plus d'information ici :
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut utiliser des évenements
    Bonjour,

    Je pense que l'utilisation des évènements devrait être la solution. On peut imaginer un MVC rapide avec pour modèle ton log (que tu écris dans le fichier) dès qu'un ligne est inscrite tu peux notifier JPanel avec un event contenant la ligne du log.
    Vite fait :
    étendre un EventListener au niveau de ton interface (JPanel)
    au niveau du log un EventListenerList doit permettre d'enregistrer un eventListener (JPanel)
    étendre EventObject pour qu'il comporte la ligne du log

    Au pire y a moyen avec une méthode static de tout récupérer n'importe où...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Bonjour Nemek.

    Merci pour ces 1er éléments de réponses.

    En fait, je n'utilise pas d'API de LOG. Je fais du "LOG" à la main! C'est à dire que dans mon fichier texte (dont le remplissage fonctionne) j'arrive à écrire plusieurs ligne avec à chaque fois
    date + heure : évènement 1
    date + heure : évènement 2
    ...

    Les évènements sont du texte écrit "en dur" pour l'instant : authentification réussie, récupération du fichier Ok, fermeture de l'application annulée...

    Je voudrais écrire la même chose dans mon JTextArea.

    Le problème est peut être plus global que ça: comment écrire une classe qui utilise un composant déclaré dans une autre classe?
    La difficulté est que je ne peut pas instancié à chaque fois ce composant puisque je veux que les lignes s'ajoutent.

    J'ai pensé à recopier mon fichier texte dans ma JTA (et ça marche) mais le problème est que je ne veux pas récupérer l'intégralité de ce fichier à chaque fois (gestion des sessions utilisateurs...)

    Je vais vous montrer des bouts de code, ce sera peut être plus clair!

    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
     
    public class vuePrincipale implements ActionListener, WindowListener {
     
    private JTextArea textArea;
     
    ....
     
    public void actionPerformed(ActionEvent e) {
     
    // MISE EN ¨PLACE DU JTEXTAREA POUR L'AFFICHAGE DU LOG
    			setTextArea(new JTextArea(15, 40));
    			getTextArea().setEditable(false);
    			getTextArea().setVisible(true);
    			JScrollPane scrollPane = new JScrollPane(getTextArea());
    			panelExec.add(scrollPane);
     
    // écrire "récupération du fichier "
    			EcritureJTA EJTA = new EcritureJTA();
    			EJTA.Ecrire("récupération du fichier");
    ....
    Et le code d'écriture:
    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
     
    public class EcritureJTA extends vuePrincipale{
     
    	// ESSAYER DE RECUPERER LE TEXTE DEJA PRESENT DANS LE TEXTAREA ET Y AJOUTER LES NOUVELLES LIGNES
    	public void Ecrire(String TexteAEcrire) {
    		String texteDejaEcrit = "test";
     
    		// Gestion de la date et de l'heure
    		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    		Date LaDate = new Date();
     
    //		texteDejaEcrit = textArea.getText();
    //		String textAEcrire = TexteAEcrire;
    		getTextArea().setText(sdf.format(LaDate) + " : " + texteDejaEcrit);
    	}
    }
    Pour l'instant, ça plante... :
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at vue.EcritureJTA.Ecrire(EcritureJTA.java:30)


    J'espère que vous me comprenez car j'ai un peu de mal à expliquer mon problème...

    Merci encore!

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Problème résolu: j'ai utilisé les accesseurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static JTextArea getJTA(){
    		return(getTextArea());
    	}
    Puis
    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
     
    public class EcritureJTA extends vuePrincipale {
     
    	public static void Ecrire(String TexteAEcrire) {
    		String texteDejaEcrit = "test";
     
    		// Gestion de la date et de l'heure
    		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    		Date LaDate = new Date();
     
    		//Récupération du texte déjà écrit dans la JTA
    		texteDejaEcrit = getJTA().getText();
     
    		getJTA().setText(
    				texteDejaEcrit + "\n\r" + sdf.format(LaDate) + " : "
    						+ TexteAEcrire);
    	}
     
    }
    Et enfin, l'appelle de la méthode d'écriture qd on en a besoin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    EcritureJTA EJTA = new EcritureJTA();
    					 EJTA.Ecrire("Vérification de la présence du fichier toutes les 3 secondes");
    J'espère que ça pourra servir à d'autres...

    Merci encore pour votre aide!

    @+

    Thomas.

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

Discussions similaires

  1. [vbnet 1.1]Inserer deux simple quote sans texte dans une db
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/03/2007, 08h51

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