2010-03-17 5 views
3

Nous avons un problème dans notre application basée sur le swing puisque nous avons amélioré notre version java de 6u5 à 6u18 (l'application fonctionne sur WinXP).Problème de mélange poids léger et léger swing étrange

Notre application contient un objet Canvas qui réside dans un JFrame. L'application dessine des choses sur la toile.

Chaque fois que nous déplaçons un objet pivotant léger (fenêtre contextuelle ou autre) sur le canevas, il y a un problème d'actualisation. Il clignote - devient noir. Le problème se résout seulement après que nous avons éloigné le composant swing du canvas et que nous l'avons cliqué de nouveau.

Nous pensons que ce problème est lié au fait que la toile est un objet lourd. Et nous savons qu'il y a eu des changements dans les nouvelles versions de java sur le mixage d'objets lourds et légers.

Un peu plus de détails: 1) Notre problème se reproduit dans Java 6u14 et 6u16. 2) Tout fonctionne bien dans java 6u5.

Une autre chose étrange: Nous avons 2 types de stations exécutant notre application. Le premier type possède une carte graphique ATI FireGL7100 PCI-E. Le second type a une carte graphique Matrox G450 PCI. Le problème ne se reproduit pas sur la station Matrox dans une version Java. Une chose de plus: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6829858 - ressemble à notre problème.

Notre problème est-il familier? Avez-vous des suggestions (solutions de contournement, des idées comment la différence des cartes graphiques est connecté à ce problème)

espoir j'été assez clair, Yoav

Répondre

4

L'article Mixing heavy and light components décrit comment la prise en charge de cette modification a été modifiée dans JDK 6 mise à jour 12. Les deux cartes vidéo peuvent gérer l'ordre Z différemment. Est-ce que votre code a une solution de contournement qui n'est plus nécessaire?

2

Nous avons eu des problèmes w/mélange HW/LW de 6u14 + (les corrections qui cassent tout est en 14). Notre problème était dans une bibliothèque tierce partie (JIDE) et ils ont fini par régler le problème de leur côté.

Ma suggestion est d'éviter HW où vous le pouvez. Vous pouvez obtenir une performance très décente de LW si fait correctement. Que dessinez-vous qui doit être HW?

2

Je ne sais pas si cela est pertinent pour quelqu'un d'autre, mais nous avons trouvé une solution de contournement pour notre problème.

Nous avons défini les propriétés système sun.awt.noerasebackground et sun.java2d.noddraw sur true. Cela a éliminé notre problème.

Le seul problème est que je ne suis pas sûr quels autres problèmes pourraient augmenter à partir de la définition de ces propriétés du système.