Fenêtre Swing Java corrompue

L’un des utilisateurs d’un programme d’interface utilisateur graphique Java que j’ai écrit a un problème: la fenêtre principale ne s’affiche pas correctement à l’écran et l’interface graphique se bloque. Voici une comparaison de la capture d’écran sur son écran (en haut) et de ce qui est censé apparaître (en bas):

alt text http://www.shapecollage.com/temp/SwingCorruption.jpg

Il exécute Windows XP SP3 avec Java 1.6.0_13 et sa carte graphique est un ATI X1600 avec une configuration à double moniteur.

Le programme (si vous souhaitez tester par vous-même) est à:
www.shapecollage.com/download.html

J’ai plusieurs milliers d’utilisateurs et personne d’autre n’a signalé cette erreur et je l’ai testée à fond sur Windows XP. Tout ce qui est computationnel est fait dans un thread séparé de celui du thread d’interface graphique standard et le programme fonctionne sur de nombreux autres ordinateurs, donc je ne pense pas que ce soit un problème avec le programme lui-même.

Quelqu’un a-t-il déjà vu ce type d’erreur sur un système ou a-t-il des suggestions quant à ce qui pourrait être incorrect sur le système de cet utilisateur et causer un tel problème?

Merci,
Vincent

Nous avons eu un problème très similaire, qui a été résolu en mettant à jour le pilote graphique. Le problème peut provenir de la configuration à double moniteur menant à la corruption de la VRAM, de sorte que votre client pourrait essayer de mieux fonctionner avec un seul moniteur. Bien que l’on puisse s’attendre à ce que Java ne soit pas très dépendant du matériel, notre application graphique intensif gère toujours le BSOD lorsqu’elle est exécutée à travers un type de projecteur particulier …

Il y a peut-être une interaction problématique entre Java et le pilote graphique et / ou le matériel graphique.

Plusieurs indicateurs peuvent influencer la manière dont Java se déplace à l’écran .

Vous voudrez peut-être essayer de démarrer les applications avec l’un de ces indicateurs:

  • -Dsun.java2d.opengl=true
  • -Dsun.java2d.d3d=false
  • -Dsun.java2d.noddraw=true

Ces indicateurs permettent de basculer le pipeline OpenGL, d’utiliser Direct3D et de désactiver l’utilisation de DirectDraw.

Si l’un de ces problèmes résout votre problème, vous pourriez alors envisager de classer un bug avec sun, car ce ne sont probablement pas les applications qui sont en cause ici.

Je n’ai pas vu ce type particulier de graphiques endommagés, mais j’ai vu des problèmes graphiques Java sous Windows disparaître lorsque l’accélération matérielle dans le panneau de commande d’affichage étendu est réduite.

Swing n’est pas thread-safe, donc si vous faites le rendu ailleurs que sur le thread d’interface graphique, vous pouvez vous attendre à ce genre de chose.

J’ai vu des graphiques corrompus comme ça, mais jamais en Java. Les endroits que j’ai vus étaient dans le code de dessin Windows / etc, et le carrelage et l’apparence de neige indiquaient généralement quelque chose comme dire au code de dessin de l’image que vous alliez dessiner une image d’une certaine taille et profondeur de bits, tampon d’image avec une profondeur de bit différente. comme remplir le tableau d’octets avec les données d’une source RGBA entière et le mettre dans une destination RVB entière?

mais à partir de la capture d’écran, l’utilisateur a l’impression d’exécuter aussi un autre type d’application, car il ya un bouton supplémentaire par les boutons minimiser / agrandir / fermer, alors une autre application tierce modifie la fenêtre. Peut-être que ça joue avec ça?

Sinon, je dirais le problème du pilote. Il y a toujours des solutions comme la désactivation du dessin de d3d ou d’autres optimisations de dessin que la machine virtuelle fait maintenant automatiquement, peut-être que cela résout le problème?