2010-07-15 24 views
1

J'ai un peu de mal avec les composants Swing.Exécution de JPanels dans leurs propres threads.

Dans un JFrame, j'ai un GLCanvas et un JEditorPane séparés par un JSplitPane. Cette configuration rend la réponse de l'affichage instable dans les deux panneaux.

Cependant, quand je place les GLCanvas et JEditorPane chacun dans leur propre JFrame, la réponse d'affichage est grande.

Je suppose que c'est parce que, dans le second cas, toutes les opérations sur ces composants sont effectuées dans des threads séparés. Si oui, mes questions sont les suivantes:

Est-il possible d'exécuter des composants dans leurs propres threads? Ou y a-t-il une meilleure façon de le faire?

Merci pour toute aide que vous pouvez fournir.

+1

Non, ils sont rendus dans le même fil. – OscarRyz

Répondre

1

Je pense que votre hypothèse est incorrecte. Toutes les opérations de dessin Swing se produisent sur le même thread.

Peut-être pourriez-vous approfondir votre description du mot 'choppy'? Peut-être s'agit-il d'un problème de double buffering ou de non-double buffering?

+0

Par choppy, je veux dire qu'il y a un décalage entre une pression de touche et le texte dans le volet de l'éditeur mis à jour. De même, le déplacement du volet fractionné est décalé. J'espère que cela a du sens. – sparrow400

4

Je soupçonne que la mauvaise performance dans le premier cas a plus à voir avec Mixing heavy and light components. Comme la plupart des API graphiques, Swing utilise un single, event dispatch thread pour mettre à jour l'écran; Je devine que JOGL doit adhérer à la même restriction. En même temps, il y a many ways pour effectuer un travail dans un autre thread et communiquer avec l'environnement graphique.

+0

Merci, Cela a du sens. Je vais enquêter plus loin. Le site Web de Matthew semble être un bon point de départ. – sparrow400

1

On dirait que @trashgod a raison. GLCanvas est un "lourd" composant descendant de awt Canvas. Pour voir si c'est vraiment un cas Je suggère de remplacer GLCanvas avec GLJPanel, qui est un descendant du composant Swing de JPanel.

+0

Bonne trouvaille! Cela ressemble à une excellente alternative. – trashgod

+0

J'ai effectivement essayé ceci, et bien qu'il résout le problème avec le lag dans EditorPane, il a un taux de rafraîchissement beaucoup plus lent par rapport à GLCanvas. J'ai vraiment besoin de maintenir une bonne vitesse d'image dans la vue de rendu. – sparrow400

+0

J'ai un taux de rafraîchissement plus lent, à cause de la surcharge du pipeline Swing. Comme je le vois maintenant, vous n'avez vraiment qu'un seul choix - séparer vos éléments si vous voulez vous débarrasser des "choppinnes" –