2009-05-15 7 views
5

L'un des utilisateurs d'un programme Java GUI swing que j'ai écrit a un problème où la fenêtre pivotante principale ne rend pas à l'écran correctement et l'interface graphique se fige. Voici une comparaison de la capture d'écran sur son écran (en haut) et ce qui est censé apparaître (en bas):Fenêtre Swing Java corrompue

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

Il fonctionne sous Windows XP SP3 avec Java 1.6.0_13 et sa carte graphique est une ATI X1600 avec une configuration à double moniteur.

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

J'ai plusieurs milliers d'utilisateurs et personne n'a signalé d'autre cette erreur et je l'ai testé à fond sur Windows XP. Quelque chose de calcul est fait dans un fil séparé de celui du thread GUI normal 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, mais plutôt quelque chose de mal avec sa configuration particulière.

Est-ce que quelqu'un a déjà vu ce type d'erreur sur un système ou a-t-il des suggestions sur ce qui pourrait poser problème sur le système de cet utilisateur et qui causerait un tel problème?

Merci,
Vincent

+1

Intéressant. Un tel problème m'a été signalé il y a un an ou deux; Je n'ai jamais pu le reproduire, donc je l'ai fermé comme probablement un bug de pilote. Je serais intéressé de voir si de bonnes réponses apparaissent ici. –

+0

Yikes! Pour que ce soit si mauvais, il faut que ce soit un truc de pilote graphique vs jvm - je doute qu'il y ait beaucoup de choses à faire. – Tom

+0

Une fois que le programme est chargé, il y a quelques artefacts mineurs, mais évidents dans le rendu, et puis quand des tentatives sont faites pour utiliser réellement l'interface, il devient apparemment fou et il se fige. Je ne peux pas reproduire ceci sur mon bureau ou plusieurs autres ordinateurs. – Vincent

Répondre

2

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 du double moniteur entraînant une corruption VRAM, de sorte que votre client peut essayer si elle fonctionnera mieux avec un seul moniteur. Alors que vous pourriez vous attendre à ce que Java ne soit pas très dépendante du matériel, notre application graphique-intensive réussit toujours à BSOD lorsqu'il est exécuté par un type de projecteur particulier ...

+0

L'utilisateur a mis à jour son pilote de carte graphique et il a résolu le problème. – Vincent

0

Swing est pas thread-safe, donc si vous faites le rendu partout autre que le thread GUI, vous pouvez vous attendre ce genre de chose.

+0

Le rendu est effectué uniquement dans le thread graphique. Le programme fonctionne correctement sur des milliers d'autres ordinateurs. – Vincent

1

Je n'ai pas vu ce type particulier de graphiques corrompus, mais j'ai vu des problèmes graphiques Java sur Windows disparaître lorsque l'accélération matérielle dans le panneau de contrôle d'affichage étendu est réduite.

0

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

mais à partir de la capture d'écran, l'utilisateur semble également utiliser un autre type d'application, car il y a un bouton supplémentaire par les boutons minimiser/agrandir/fermer, donc une autre application tierce modifie la fenêtre . Peut-être que c'est déconner avec ça?

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

6

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

Il y a several flags that can influence how Java draws to the screen.

Vous pouvez essayer de lancer les applications avec l'un de ces drapeaux:

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

Ces drapeaux actionnez le pipeline OpenGL, tour d'utiliser Direct3D et désactiver l'utilisation de DirectDraw respectivement.

Si l'un de ceux-ci résout votre problème, alors vous pourriez envisager de déposer un Bug avec sun, car ce n'est probablement pas les applications qui sont en cause ici.

+1

J'ai rencontré un problème lié dans lequel -Dsun.java2d.d3d = false a résolu le problème. Voir http://stackoverflow.com/questions/848481/problem-with-painting-in-java-swing-app-in-java-1-6 – Avrom

+1

Année 2015: Dans Ubuntu 14.04, corruption graphique dans tous les contrôles gui, dans ma propre application et dans des applications tierces que j'utilise. Démarrage de l'un de ceux avec -Dsun.java2d.opengl = true résolu le problème. Cela arrive avec les cartes NVidia, je pense que Intels sont OK. –