Bonjour,
j'ai un thread A qui génère des évènements (des strings assez courts)
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 fireMyEvent(new MyEvent(new String("abc " + Integer.toString(i) + "\r\n")));
Le pb, c'est que ça plante l'application sans prévenir et sans aucun message.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 private synchronized void messageRecuVersEcran(String str) { ta.setText(ta.getText() + str); }
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
Partager