6
votes

Java Swing - UI Congélation

Je fais une routine dans Java (1.5) + balançoire, ce damandne un peu de temps. Comment la meilleure façon de mettre en œuvre cet acheminement en dehors du fil de swing, pour éviter la congélation de l'interface utilisateur?

Merci d'avance


4 commentaires

Cela pourrait aider: Stackoverflow.com/Questtions/2564388/javas-swing-Trireading


En fait, ce lien est bien meilleur que ma réponse aussi ...


Oui, j'ai posté une réponse avec ce lien, mais c'est juste inutile maintenant :)


Merci. J'ai fait ma propre implémentation selon cette réponse et ajouter une barre de progression pour signaler le statut. :)


3 Réponses :


7
votes

Au début rougeur, regardez la classe SwingWorker. Lorsque vous voulez rendre le code plus robuste et testable, vous voulez probablement vous éloigner de cela, mais c'est un bon départ assez bon.

Vous pouvez obtenir une version pour Java 1.5 ici . Avec 1.6, il fait partie de l'API standard.


2 commentaires

Je n'ai jamais utilisé la mise en œuvre JDK, mais cela semble être buggé, voir Bugs. Sun.com/bugdatabase/view_bug.do?bug_id=6880336


@Ash, cela s'applique de 1.6U18, pas seulement 1,7



3
votes

Utiliser swingworker est bien sûr une bonne idée et je recommande que. Écrire également Custom javax.swing.Timer s et java.lang.thread s.

Mais n'oubliez pas d'utiliser Profiler - Cela peut vous aider à trouver de nombreux problèmes. Comme Swing a souvent des problèmes avec "morts" auditeurs détenant des références qui ne peuvent pas être recueillies (résultant de réponses très lentes ou de congélation de l'interface utilisateur ou même des fuites de mémoire). Profiler vous aidera à enquêter sur les besoins en mémoire de situations spécifiques lors de l'utilisation de votre application et vous pourrez donc être adapté à votre application.


0 commentaires

2
votes

Résolu comme commentaire:

"Cela pourrait aider: Stackoverflow.com/Questtions/2564388/javas-swing-Trireading - Andreas_d 5 juil 5 à 22:01 "


0 commentaires