IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applets Java Discussion :

Problème de scintillement


Sujet :

Applets Java

  1. #1
    Invité
    Invité(e)
    Par défaut Problème de scintillement
    Bonjour,

    Je travaille sur une applet de traitement d'image. Elle se présente sous la forme d'une JFrame en mode plein écran. Malheureusement dès que j'ouvre une autre JFrame pour un menu ou autre ou lorsque l'utilisateur change de fenêtre (navigateur, explorateur de fichier ou autre...), la JFrame courante scintille.

    Après plusieurs recherche sur internet, j'ai trouvé deux raisons qui pourraient expliquer mon problème. La première est de générer des threads qui peuvent interrompre ceux d'AWT et augmenter le temps de rafraichissement de la JFrame.
    La deuxième, le fait que les applets aient une méthode "update", appelé par le navigateur qui efface l'écran et la redessine entièrement.

    J'ai donc vérifié que je n'avais rien qui perturbait les threads AWT de type paint et autre. J'ai surchargé beaucoup de méthode paint et peut-être que cela allonge le temps d'affichage mais je ne crée aucun thread niboucle dans ces affichages.
    Pour la deuxième raisons, j'ai essayé la solution qui consiste à surcharger la méthode "update" de l'applet et de lui faire appeler la méthode "paint", ce qui évite d'effacer l'écran avant de redessiner la frame.

    Malheureusement rien a changé, j'ai mis un "System.out.println()" dans la méthode "update" que j'ai surchargé mais l'applet n'y passe même pas.

    Si quelqu'un a une idée

    Merci d'avance.
    Dernière modification par Invité ; 15/10/2009 à 11h46.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Autre point:

    Le problème n'apparait pas lorsque je teste mon applet sous netbeans.
    Ah et le problème n'apparait pas sous windows -_- que sous mac......

  3. #3
    Invité
    Invité(e)
    Par défaut
    Suite du problème....

    Après avoir supprimer la plupart de mes composants le problème de scintillement disparait. Etant donné que mon applet est une application de retouche d'image il est normal que j'effectue beaucoup de traitement dans les méthodes paint de mes composants.

    Ce que je ne comprends pas c'est que lorsque je dessine dans mon canevas il n'y a aucun problème alors que je repaint bien la plupart de mes objets.

    Quelle pourrait être alors la différence avec le rafraichissement total de l'applet lors du changement de focus?

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Donne le code minimal compilable qui permet de reproduire le problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ben c'est le soucis ..... C'est une immense applet contenant une multitude d'outil de dessin et autre. Le truc c'est que je n'ai pas vu se soucis lors du développement puisque le problème n'apparait pas dans mon environnement netbeans. C'est une fois l'applet déployé sur le serveur que je m'en suis aperçue.

    Dans tous les composants que j'ai eu besoin de modifier j'ai surchargé la méthode paint(Graphics g);.
    Après avoir chercher sur internet, j'ai ensuite surcharger toutes les méthodes update(Graphics g) de facon à appeler la méthode paint(Graphics g) directement pour éviter l'effacement des composants avant le "redessinage".

    Du coup, ce que j'aimerais savoir c'est déjà si il y a d'autres moyens d'optimiser les méthodes graphiques et si, il y a un moyen d'éviter le raffraichissement total de l'applet lors d'un changement de focus?
    Ce dernier étant inutile vu que mon applet est dans une fenêtre non redimensionnable donc rien de graphique ne peut être changé depuis le système.

    Pour info le coeur de mon applet se base sur le superbe soft imageJ en ce qui concerne son canevas et ses plugins dicom. Et si vous testez imagej il semble y avoir le même problème de scintillement lors d'un changement de fenêtre.

  6. #6
    Invité
    Invité(e)
    Par défaut
    j'ai remarqué que certains de mes composants ne s'effaçaient pas lors de ce "raffraichissement" et après quelques tests je me suis aperçue que les composants AWT n'avait pas ce problème contrairement aux composants swing...
    D'après ce que j'ai compris les composants AWT sont les plus proches du système d'exploitation et sont donc redessiner plus rapidement que des composants SWING qui eux sont créés entièrement en java.
    Malheureusement je pense que la plupart des composants que j'utilise n'existe pas en AWT....

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Pour les composants Swing, essaie de surcharger uniquement "paintComponent".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Déjà essayé aussi. Merci de me filer un coup de main

    Est ce que c'est possible d'empêcher le rafraichissement de l'applet par le navigateur lors d'un changement de focus? parce qu'il n'y a que cette action qui la fait se repeindre entièrement .

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bon finalement j'ai remplacé le "Canvas" sur lequel l'image était dessinée par un "JPanel".
    du coup plus de scintillement. Le problème maintenant c'est que l'on ne peut pas attraper les keyEvent sur un JPanel.

    Après quelques recherches il s'agit d'un problème de focus. Je force donc le focus sur l'applet, sur le JPanel etc...

    Ca marche sous Mac OSX mais pas sous Windows maintenant ... -_-

    Sous windows lorsque je lance l'applet elle n'attrape pas les KeyEvent. Il faut que je fasse "Alt+Tab" pour retourner sur l'applet pour que cela fonctionne.
    J'ai donc utilisé la méthode "setFocusTraversalKeysEnabled(false);"

    Et la apparemment ca fonctionne !!!

    Voilà si ca peut aider quelqu'un un jour


    Sachez que mélanger AWT et SWING c'est le mal!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de scintillement
    Par Nicolas123 dans le forum GLUT
    Réponses: 4
    Dernier message: 23/01/2009, 10h55
  2. Problème de scintillement
    Par grandjouff dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/09/2006, 02h49
  3. problème de scintillement
    Par chabfive dans le forum Graphisme
    Réponses: 4
    Dernier message: 21/06/2006, 11h38
  4. Problème de scintillement sur le curseur d'une TTrackbar
    Par xtapola dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/11/2005, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo