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

Interfaces Graphiques en Java Discussion :

(conception) lien entre ihm et fonctions techniques


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Points : 451
    Points
    451
    Par défaut (conception) lien entre ihm et fonctions techniques
    Bonjour à tous,
    J'ai une question un peu philosophique...

    Sans être particulièrement un spécialiste de Java, j'ai fait une application qui génère une base de données à partir de fichiers textes assez importants.
    Cette application étant vouée à être utilisée par des non-informaticiens, j'ai fait une petite interface avec Swing. Dans le main j'appelle le constructeur de ma classe ihm puis les différantes fonctions "techniques" (situées dans des classes spécifiques) sont appelées en fonctions des actions de l'utilisateur sur l'interface.
    Le problème est que le parsing du texte ajouté à la création de la bdd prend pas mal de temps et que je dois afficher une barre de progression.

    Et là je suis vraiment embêté en terme de conception : l'information à afficher (la progression) est dans les classes "techniques" qui ne sont pas sensées appeler l'ihm.

    Pour l'instant ma solution pour éviter d'appeler la màj de la barre à partir de la fonction technique de traitement est de passer par une fonction dans la classe Main qui s'occupe d'appeler l'ihm, ça change pas grand chose mais j'ai un peu moins mauvaise conscience.
    Après j'ai bien eu quelques idées un peu sioux du genre mettre le niveau de progression dans une variable volatile et la choper avec un timer dans l'interface mais ça me parait démesurément compliqué et finalement pas beaucoup plus propre.
    Il s'agit d'une petite application sans ambition extraordinaire mais j'aimerai qu'on puisse facilement la reprendre/modifier (si tout se passe bien elle va passer en open source) donc je ne voudrais pas qu'un problème de conception (en plus lié à un élément mineur) décourage d'hypothétiques bonnes volontés.

    Voilà, tout ça pour dire que je me pose une question que des milliers voir des millions de développeurs ont du se poser avant moi et que je ne trouve pas de réponse satisfaisante sur le net..
    Si quelqu'un a une idée ou a déjà développer ce genre de chose, je suis preneur de vos conseils.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. Normalement, une "fonction" technique appelée dans une ihm doit être appelée dans un thread autre que l'Event Dispatch Thread, par exemple avec un SwingWorker qui simplifie son implémentation. C'est même obligatoire si la fonction est longue, sinon ça gèle l'interface.
    2. Le principe pour mettre à jour l'ihm (qui, elle, doit être faite dans l'Event Dispatch Thread), au cour de l'évolution de la fonction peut reposer sur deux principes :
      1. la production de résultats (la fonction génère par exemple des objets qui s'ajoutent dans une JTable. Le SwingWorker fournit nativement le support pour ça (publish/process).
      2. un pattern "observable": la production d'événements par la fonction qui vont être écoutés pour mettre à jour une barre de progression par exemple.
    3. Ainsi, la fonction technique ne met pas à jour l'interface et n'en a même aucune idée d'existence et pas de référence. Elle produit juste des notifications qui peuvent être exploitées par d'autres systèmes (une ihm, un système de log, un système de sauvegarde automatique, etc) juste par abonnement à un producteur de notifications.
      En plus, avec ce système, contrairement à un système de surveillance de type time, on ne consomme pas de cpu inutilement.
    4. Tu peux découpler la fonction technique et la production d'événements en utilisant une classe de moniteur (la fonction technique lui communique juste un nombre d'étapes, puis incrémente le numéro d'étape courante, et c'est le moniteur qui produit les événements).


    Exemples d'implémentation de SwingWorker :

Discussions similaires

  1. [Conception] Lien entre Utilisateur et certaines tables
    Par Vinceee38 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/06/2012, 10h48
  2. [Conception] Lien entre ma BD et mon site web
    Par martoune dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/04/2007, 17h13
  3. Réponses: 4
    Dernier message: 01/04/2007, 13h05
  4. Réponses: 1
    Dernier message: 20/12/2006, 20h55
  5. Pb de lien entre Access et Excel pour des fonctions VBA
    Par favien dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/11/2005, 01h00

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