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

EDT/SwingWorker Java Discussion :

Sécuriser une appli temps réel sous Swing


Sujet :

EDT/SwingWorker Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 69
    Points : 30
    Points
    30
    Par défaut Sécuriser une appli temps réel sous Swing
    Bonjour,

    Je dois rendre une appli temps réel Thread Safe. Le programme traite du son et affiche des oscillogrammes divers, entre autres fonctionnalités.

    J'aimerais savoir si outre les threads et fonctions longues à "passer sous SwingWorker", si je dois aussi sécuriser avec invokeLater toutes les fonctions du genre getText / setText, setColor etc.. il y en a des centaines un peu partout (544 setText exactement, 476 setEnabled pour donner une idée...)

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par Colargole Voir le message

    J'aimerais savoir si outre les threads et fonctions longues à "passer sous SwingWorker", si je dois aussi sécuriser avec invokeLater toutes les fonctions du genre getText / setText, setColor etc.. il y en a des centaines un peu partout (544 setText exactement, 476 setEnabled pour donner une idée...)

    Merci.
    Bah à partir du moment où elles sont appelées dans des threads hors EDT oui.
    Si elles sont appelées dans l'EDT pas besoin.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 69
    Points : 30
    Points
    30
    Par défaut
    Merci.

    Si je clique sur un bouton, le code appelé par actionPerformed est forcément dans l'EDT ?

    Si dans mon main je crée un JButton sur un Panel suis-je aussi dans l'EDT ? Le comportement est-il différent d'une création en mode Design sous NetBeans ?

  4. #4
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Colargole Voir le message
    Si je clique sur un bouton, le code appelé par actionPerformed est forcément dans l'EDT ?
    Oui.

    Pour le vérifier tu peux utiliser la méthode SwingUtilities.isEventDispatchThread()...

    Citation Envoyé par Colargole Voir le message
    Si dans mon main je crée un JButton sur un Panel suis-je aussi dans l'EDT ?
    Si tu es dans le main(), tu es dans ton thread principal et donc en dehors de l'EDT...

    Citation Envoyé par Colargole Voir le message
    Le comportement est-il différent d'une création en mode Design sous NetBeans ?
    Heu... Je ne comprend pas trop la question


    a++

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 69
    Points : 30
    Points
    30
    Par défaut
    Merci. Oublions la 3e question, avec du recul je ne la comprends pas non plus

    Je me demande vraiment quelle est la différence entre lancer mon traitement (lecture de flux dans boucle while) dans un doInBackground de SW et le lancer dans un run d'un Thread normal dont je sécuriserais les accès au GUI avec invokeLater.

    Et si je lance plusieurs gros threads sous SW ne risquai-je pas quelques problèmes de ressources ?

    Sujet similaire :

    http://forums.sun.com/thread.jspa?th...=709334#709334

  6. #6
    Membre régulier Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Le Swingworker est surtout là pour permettre aux traitements longs de ne pas bloquer ton application. Surtout que le Swingworker te permet de publier au fur et à mesure les résultats de ton traitement te donnant l'impression de ne pas avoir un processus figé (attendre la dernière itération pour avoir le résultat).

    Si tu fais ça dans un thread normal tu risques plus d'avoir cet effet de bord de "Ihm figée".

    Après tout dépend de tes traitements

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 69
    Points : 30
    Points
    30
    Par défaut
    Merci pour cette réponse.

    Sommes-nous bien d'accord que l'intérêt de SwingWorker réside exclusivement dans l'utilisation conjointe de doInBackground() et de process() via l'appel à publish().

  8. #8
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Il ne faut pas ignoré les messages de ton compilateur !!!

    Tu utilises les méthodes suspend()/resume() sur tes threads, alors qu'elles sont dépréciés justement car elles peuvent entrainer des blocages...


    a++

Discussions similaires

  1. Temps réel sous windows
    Par xela dans le forum Windows
    Réponses: 7
    Dernier message: 08/02/2014, 12h43
  2. [vb.net/unix] Portabilité d'une appli VB.NET sous UNIX
    Par patanoc dans le forum Visual Studio
    Réponses: 8
    Dernier message: 25/11/2006, 10h34
  3. Réponses: 3
    Dernier message: 19/11/2006, 15h40
  4. partager une appli entre utilisateurs sous XP familial
    Par biozaxx dans le forum Windows XP
    Réponses: 5
    Dernier message: 13/10/2006, 16h52

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