2010-09-16 26 views
4

Mon application ne se peint pas au démarrage. Lorsque vous le redimensionnez ou le minimisez/le maximisez, la fenêtre de l'application est peinte.Problème de peinture de fenêtre Java

Ce problème n'apparaît que sur les machines Windows (j'ai testé XP, Vista et Windows 7). Sur Mac OS X et Linux, l'application fonctionne correctement.

Les machines ont installé Java 6. Mon application utilise AWT, donc pas Swing. J'ai essayé d'utiliser Swing (donc JFrame à la place de Frame), mais cela ne résout pas le problème.

J'ai vérifié les appels sur repaint(), update() et paint() de la trame. Ils apparaissent tous, et l'image à dessiner est disponible. J'ai également vérifié si ces appels sont effectués sur le thread EDT. C'est le cas. Lorsque la fenêtre est redimensionnée (ou min/max-ed), un appel sur paint() est effectué par le système et l'image est dessinée. Ma peur est que je manque quelque chose de vraiment évident. Je rends le cadre visible, je le valide (également testé avec invalider) et je le repeins. C'est suffisant sous Mac OS X et Linux.

Est-ce que quelqu'un a des suggestions à faire ou quoi d'autre à essayer?

Merci à l'avance

Maurice

+4

comment coller un code source? – pstanton

+3

Appuyé - on dirait que vous avez été assez minutieux, mais si vous pouvez simplifier votre source à un exemple très basique qui a toujours le même problème et le poster ici, cela aiderait certainement. –

Répondre

1

Je pense que vous surchargez Frame.paint. Vous obtiendrez probablement de meilleurs résultats en peignant sur un JPanel (ou sur Canvas, si vous insistez sur le AWT obsolète), et quand vous faites cela, assurez-vous de surcharger le paintComponent de JPanel plutôt que de peindre. Dans certains cas, un JLabel avec un ImageIcon peut être encore plus simple.

Comme d'autres l'ont suggéré, essayez de publier un cas de test.

0

Il est difficile de diagnostiquer le problème sans voir de code source, mais l'image est-elle complètement chargée? AWT charge les images en arrière-plan, donc même si un appel à Toolkit.getImage() peut renvoyer une instance valide Image, cela ne signifie pas que l'image est chargée à ce moment. Vous pouvez utiliser un MediaTracker pour suivre cela.