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

Langage Java Discussion :

Methodes d'evenements et arguments


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut Methodes d'evenements et arguments
    Bonjour,

    Je voudrais savoir si lors qu'un evenement est déclanché, ActionPerformed par exemple, si l'objet Action event contient une réference vers l'objet ayant déclancher cet evenement ou contient la copie de cet objet.

    Merci d'avance
    A+

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Si tu fais event.Source() ... ou getSource() je sais plus, tu obtient une référence à l'objet.
    Mais une référence à l'objet, c'est quoi ? C'est l'objet. Tu verras il sera de type object, mais si tu fais un getClass(), tu verras que c'est bien ton objet.
    Il suffit ensuite de le caster our pouvoir l'utiliser...

  3. #3
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Ok, je me posais cette question car si l'on fait des evenement inter-thread, avec des objet passés par références, ne risque-t-il pas d'y avoir des probleme d'accés symultané à cet objet ? Est ce qu'il ne faut pas déclarer de tel objet "synchnonized" ?

    A+

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    c'est ".getSource()" la méthode.
    Effectivement dans un environnement multi-thread, il faut se méfier des références multiples sur un même objet. Enfin cela dépend du type d'objet et du contexte.
    Si tu veux un accès exclusif, il faudra passé par la synchronization et dans ce cas, tu as plusieurs moyens de le faire : synchronizer l'objet lui même, la méthode, le "this"...

  5. #5
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Merci.
    Pour ce que je développe pour l'instant je ne pense pas avoir de problème avec ça, mais c'est toujour bon de le savoir.

    A+

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Les evenements en AWT/Swing sont géré par l'EDT, et toutes les modifications des composants Swing doivent être effectué dans ce thread uniquement. Donc il ne devrait pas y avoir de problème (à part si tu modifie ces objets dans d'autres threads).

    a++

  7. #7
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Donc si l'on ne fait que des lectures d'objet AWT/Swing (getText....) via d'autre thread il n'y à pas de probleme ?

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zoullou
    Donc si l'on ne fait que des lectures d'objet AWT/Swing (getText....) via d'autre thread il n'y à pas de probleme ?
    Il vaut mieux éviter tout accès aux composants AWT/Swing depuis les autres threads. Même en lecture (car la données peuvent être incorrect ou pire en cours de modification). Si tu dois lire/modifier les valeurs de composants Swing depuis un autre thread (ton thread principal par exemple), tu dois utiliser les méthode de la classe SwingUtilities :

    SwingUtilities.invokeLater() qui te permet de placer le traitement dans la file d'attente de l'EDT. Cette méthode te rend la main de suite sans attendre que les modification soit effectué. C'est ce qui decrait être utilisé pour mettre à jours l'affichage.

    SwingUtilities.invokeAndWait() effecute la même chose, mais ne rendra la main qu'une fois que le traitement sera fini. Elle est donc généralement utilisé lorsqu'on souhaite récupérer des informations depuis un composant.


    a++

    PS : Il existe les mêmes méthode pour AWT dans la classe EventQueue.

  9. #9
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Pour résumé, pour tout accés a un composant Swing par un autre Thread, on doit creer un objet dont le traitement sera executer dans l'EDT via SwingUtilities.invokeLater() ou SwingUtilities.invokeAndWait(), cet objet effectue son traitement puis le renvoie à l'objet l'ayant demander (qui est dans le thread principal par exemple) en apellant une methode de cet objet.

    Est ce correct ?

    A+

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/01/2011, 16h06
  2. [Débutant] Undefined function or method 'plotcontour' for input arguments of type
    Par marionba dans le forum MATLAB
    Réponses: 4
    Dernier message: 28/10/2009, 21h41
  3. Réponses: 2
    Dernier message: 04/09/2009, 16h40
  4. Réponses: 6
    Dernier message: 03/04/2009, 23h30
  5. [Langage][Classe][Methode]Comment récuperer les arguments d'une fonction ?
    Par FremyCompany dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/07/2006, 16h06

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