Bonjour ou bonsoir,

J'ai un soucis, expliqué ci-dessous.

Ingrédients :
  • Une JFrame(jF) dans laquelle se trouve un JLabel(jL)
  • Un String(texte) pouvant varier et de taille(tailleTexte) pouvant également varier
  • Un Thread(defil), de priorité maximale, qui fait défiler le texte dans le jL à l'aide d'un compteur(compteur) qui est incrémenté "tous les 100 millisecondes"(je suis obligé d'avoir une périodicité d'environ 100 millisecondes)

Code du Thread : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
			Thread defil = new Thread() {
				public void run() {
					compteur = 0;
					tailleTexte = texte.length();
					while (true) {
						Thread.sleep(100);
			        		tailleTexte = texte.length();
			        		compteur = compteur % tailleTexte;
						jL.setText(texte.substring(compteur, tailleTexte - 1) + texte.substring(0, compteur));
			        		compteur = (compteur + 1) % tailleTexte;
					}
				}
			 };

Mon soucis est le suivant :
J'ai un lag d'affichage.

En dessous de 200 millisecondes, un lag se fait sentir lors de l'affichage.
"Normal, c'est dépendant du processeur sur lequel est lancé le programme", vous allez me dire.

MAIS j'aimerais tout de même avoir une solution.

J'ai eu un début de solution, à savoir :
La méthode setText pour un JLabel prend trop de temps. Donc il faut trouver un component dont le setText est plus rapide(au moins deux fois) que celui pour un JLabel, ou alors faire un gif animé du texte défilent et l'affiché.
NB : Je n'aime pas la deuxième proposition, non pas par flemme, mais pour raison technique.

Pouvez vous m'aider ?

Merci


Edit : Pour les curieux, je n'ai pas oublié de synchroniser le String texte et je n'ai pas oublié de catcher l'éventuel InterruptedException du sleep. A part ces deux "non ajouts" au code plus haut, tout est à l'identique.