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

Composants Java Discussion :

[swing]Différence de comportement selon hardware


Sujet :

Composants Java

  1. #1
    Membre actif Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 253
    Points
    253
    Par défaut [swing]Différence de comportement selon hardware
    Bonjour,

    Le sujet n'étant peut-être pas très explicite je vais être plus précis:
    J'ai créé une appli qui présente dans une de ses frames une JTable.

    Celle-ci est équipée de tous les renderers qui vont bien et peut être amenée à être mise-à-jour (nouvelle ligne en général) toutes les 30 sec.

    Mon pb est que tout se passe très bien sur certaines "vieilles" machines, alors que sur de plus récentes l'affichage part en sucette: la JTable devient grise ou une seule colonne s'affiche lors de chque nouvelle entrée...

    Les JRE ont été vérifiées et sont bien les mêmes partout...
    Petite précision, l'appli est délivrée sous Java Web Start et idem, les versions sont les mêmes d'un PC à l'autre.
    Enfin, aucun pb sous Linux, seulles certaines machines ("vieilles", contre "récentes") sous windows sont impactées...

    Est-ce que ça peut venir d'un pb style carte graphique ou driver de celle-ci ?
    Sinon si vous avez d'autres idées, je suis preneur !

    Merci par avance !

    PS: j'ai testé le doubleBuffering --> ça n'a rien changé.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Es-tu sur de faire les modifs de ta table dans l'EDT et non pas dans ta thread perso ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre actif Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par bouye
    Es-tu sur de faire les modifs de ta table dans l'EDT et non pas dans ta thread perso ?
    Désolé, mais qu'appelles tu l'EDT ?

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Event Dispatch Thread - La thread spéciale qui sert à la fois pour le rafraichissement de l'affichage et à la progagation des évènements dans AWT/Swing.

    Même si tu fais tes traitements dans un autre thread, il te faut modifier le contenu de ta table dans l'EDT et uniquement dans l'EDT (les composants Swing ne sont pas thread-safe) à grand coup de SwingUtilities.invokeLater().
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre actif Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par bouye
    Event Dispatch Thread - La thread spéciale qui sert à la fois pour le rafraichissement de l'affichage et à la progagation des évènements dans AWT/Swing.

    Même si tu fais tes traitements dans un autre thread, il te faut modifier le contenu de ta table dans l'EDT et uniquement dans l'EDT (les composants Swing ne sont pas thread-safe) à grand coup de SwingUtilities.invokeLater().
    Ok !
    Alors oui, je confirme, chaque refresh se fait via un nouveau Runnable mis en paramètre de SwingUtilities.invokeLater(...)...

  6. #6
    Expert éminent

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Points : 8 235
    Points
    8 235
    Par défaut
    Salut,
    J'ai rencontré un probleme similaire avec une JTable qui affichait bien toutes les données s'ajoutant sur de vieille machine et pas sur des machines récentes.
    J'avais un TableModel auquel on ajoutait des lignes par l'intermédiaire d'une méthode add. Cette méthode faisait un petit traitement sur l'objet passé en parametres pour mettre en forme certaines informations. Le probleme etait que les appels à cette méthode se faisait par des threads de traitement. Sur les machines récentes et donc performantes, j'avais des problemes d'accès concurrents sur la méthode d'ajout dans le TableModel et je perdais une partie de mes informations. L'ajout d'un synchronized sur la méthode d'ajout a résolu le probleme.

  7. #7
    Membre actif Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 253
    Points
    253
    Par défaut
    Hello !

    Merci pour ton aide !
    Les "vieilles machines" n'ont seulement que 2 voire 1 an pour l'une d'entre elle...
    Cela dit j'ai testé pour être sûr et la synchronisation autour de la JTable ou du Table Model ne résout pas le pb...

    En même temps le service info fait des tests avec différents drivers pour la carte graphique, mais rien de neuf...



    Encore merci pour votre aide !
    Et je reste toujours preneur de la plus petite idée !

  8. #8
    Membre actif Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 253
    Points
    253
    Par défaut
    Ayant aussi posté sur forum.java.sun.com, une réponse tend à confirmer le pb de drivers: pb équivalent résolu en changeant les drivers...
    Cela dit, chez nous, avec les différents essayés ce n'est pas encore probant...
    Les cartes sont des Intel graphics... Au cas où ça interpellerait qqun...

    Dans tous les cas, c'est plutôt moyen pour Swing...

  9. #9
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    As-tu essaye de desactiver l'acceleration Direct3D ou DirectDraw ? Il faut utiliser respectivement les flags -Dsun.java2d.d3d=false et -Dsun.java2d.noddraw=true sur la commande en ligne.
    Romain Guy
    Android - Mon livre - Mon blog

  10. #10
    Membre actif Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par Gfx
    As-tu essaye de desactiver l'acceleration Direct3D ou DirectDraw ? Il faut utiliser respectivement les flags -Dsun.java2d.d3d=false et -Dsun.java2d.noddraw=true sur la commande en ligne.
    Bonjour,
    En fait je ne parviens pas tester avec ces paramètres: les clients sont lancés via Java Web Start et pas moyen de setter tout ça.
    De plus le fichier JNLP côté serveur ne semble pas permettre ce genre de réglage si je m'en fie à la DTD...
    Donc là, c'est pas top...

    Merci dans tous les cas !

  11. #11
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Si, tu peux definir ces parametres dans un JNLP. Voila un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      <resources>
        <j2se version="1.5+" />
        <jar href="collage.jar" />
        <jar href="collage-photos.jar" />
        <property name="sun.java2d.d3d" value="false" />
      </resources>
    Romain Guy
    Android - Mon livre - Mon blog

  12. #12
    Membre actif Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par Gfx
    Si, tu peux definir ces parametres dans un JNLP. Voila un exemple :

    <resources>
    <j2se version="1.5+" />
    <jar href="collage.jar" />
    <jar href="collage-photos.jar" />
    <property name="sun.java2d.d3d" value="false" />
    </resources>
    Bonjour,

    Merci pour tout !
    Bon avant tout, mon pb n'est pas résolu

    J'ai donc bien modifié mon jnlp en prenant en compte ces paramètres.
    J'ai aussi bien veillé à ce que ce soit ce nouveau jnlp utilisé et pas l'ancien qui serait en cache dans Tomcat ou côté client...

    Mais malgré tout, le pb persiste...

  13. #13
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    As-tu essaye en commande en ligne sans le JNLP ? Si ca resoud le probleme de cette maniere (essaye un param, puis l'autre, puis les deux) c'est que WebStart ne passe pas noddraw a la JVM (les params transferes dependent des versions malheureusement).
    Romain Guy
    Android - Mon livre - Mon blog

  14. #14
    Membre actif Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Points : 253
    Points
    253
    Par défaut
    Bon et bien ça n'a malheureusement rien donné de plus de ce côté là.

    MAIS !

    On pense avoir la solution ou tout du moins la cause:
    On utilise des P4 et en désactivant l'hyper-threading le problème n'existe plus: tout marche nickel !
    Bon le hic c'est qu'on aurait tout un parc à modifier et en même temps j'aimerai savoir s'il n'y a pas un moyen de contourner ça...

    Je vais donc ouvrir un nouveau thread sur la question...

    Merci beaucoup pour votre aide dans tous les cas !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/07/2011, 11h20
  2. [JavaScript] Différence de comportement entre IE et FF
    Par YAMKI dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/02/2007, 14h33
  3. Réponses: 2
    Dernier message: 21/08/2006, 11h56
  4. [JFrame] Explication sur une différence de comportement
    Par jems dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/07/2005, 09h23
  5. différence de perf selon la bibliotheque
    Par sir_gcc dans le forum OpenGL
    Réponses: 1
    Dernier message: 24/01/2005, 12h06

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