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

Composants Java Discussion :

[JTextArea] redessin qui plante


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Points : 32
    Points
    32
    Par défaut [JTextArea] redessin qui plante
    Bonjour,

    j'ai un thread A qui génère des évènements (des strings assez courts)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fireMyEvent(new MyEvent(new String("abc " + Integer.toString(i) + "\r\n")));
    et un thread B qui capte ces évènements. Le thread B comporte un JTextArea complété au fur et à mesure par les messages captés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private synchronized void messageRecuVersEcran(String str) {
    		ta.setText(ta.getText()  + str);
    }
    Le pb, c'est que ça plante l'application sans prévenir et sans aucun message.

    Lorsque le JTextArea est mis à jour dans le même thread, aucun pb.
    Le plantage a lieu aussi avec JTextPane.
    J'ai placé un sleep (100) dans le thread qui génère les messages, après chaque message, ça va un peu mieux, sans plus.
    Le plantage a lieu après 50 à 200 messages mais jamais au même endroit.

    La méthode qui effectue la mise à jour du JTextArea est synchronized et c'est la seule de la classe.
    Je n'ai pas d'autre accès au JTextArea pendant la mise à jour.
    Si je redimensionne la fenetre qui contient le JTextAreaou la déplace pendant la mise à jour, ça augmente la probabilité de plantage.

    Avant, j'avais un pb similaire : je n'utilisais pas les évènements : je passais au thread "générateur" l'instance de ma zone texte pour qu'il fasse lui-même la mise à jour et régulièrement : plantage.

    Tout cela me fait penser qu'il s'agit d'une question liée aux threads.
    Si qqun a une solution....

    Merci

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: [swing] redessin JTextArea plante
    Salut,

    Citation Envoyé par phil_ma
    Le pb, c'est que ça plante l'application sans prévenir et sans aucun message.
    Es-tu sur qu'il n'y a vraiment aucun message ?

    Sinon le seul problème que je vois vient de l'utilisation de l'opérateur + entre les deux chaines, car il y a création/destruction implicite d'un StringBuffer à chaque fois ce qui peut nuire aux performances...

    Il vaut mieux utiliser la méthode append() de JTextArea...

    a++

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    Formidable !
    après au-minimum 15 jours de perdus, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.swing.SwingUtilities.invokeLater(myRunnable);
    et tous mes messages en double. Mais au-moins, ça ne plante plus.


    Il vaut mieux utiliser la méthode append() de JTextArea.
    ok

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Points : 32
    Points
    32
    Par défaut [Résolu][swing] redessin JTextArea plante
    Résolu mais ça ne m'arrange pas vraiment....... car c'est un pis-aller

    1 InvokeLater bloque le thread jusqu'à la fin de run(), donc pas utilisable dans mon cas.

    2 Ai placé un Thread.sleep(200) à la suite du fireMyEvent(...), ce qui permet à la zone texte de se redessiner.

    a+

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

Discussions similaires

  1. Who qui plante
    Par ggnore dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/10/2005, 17h25
  2. PB d'update qui plante aléatoirement sans renvoyer d'erreur
    Par plc402 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/08/2005, 09h10
  3. [Novice] Problème avec Eclipse 3.0.x qui plante
    Par esolarc dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/05/2005, 13h22
  4. Programme qui plante
    Par harris_macken dans le forum C++
    Réponses: 1
    Dernier message: 22/05/2005, 23h50
  5. Pc qui plante
    Par tooms2028 dans le forum Ordinateurs
    Réponses: 9
    Dernier message: 19/03/2005, 17h32

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