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

Java Discussion :

Aide Java Threading Longue operation callback


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par défaut Aide Java Threading Longue operation callback
    Hello à tous ! J'ai besoin de savoir comment vous procéder pour faire le besoin suivant:
    - un client quelconque (console, swing, autre)
    - une bibliothèque lancant une opération longue
    - la bibliothèque doit informer le client de l'avancement (exprimé en % 0 à 100)
    - le client affiche la progression ex: 22%, 29%

    J'ai pensé à générer un thread pour l'opération longue afin de libérer le client de toute attente, puis de créer une sorte de callback où le thread informe la client de l'avancement de la longue opération

    Merci
    IRNBRU

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Grosso modo il te faut un mécanisme permettant au thread de signifier qu'il a fini son exécution, un système à base d'observer/observable.

    Ou sinon tu peux également t'inspirer de ce qui est fait dans la classe SwingWorker (sauf que celle ci est entièrement spécifique à Swing avecv la gestion de l'EDT inclue).

  3. #3
    Membre éclairé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par défaut
    Merci sinok pour l'aide j'ai pensé à faire une interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    package com.irnbru;
     
    public interface IEvent {
        void stuff(int i);
    }
     
     
    puis à faire
     
    package com.irnbru;
     
    public class Worker implements Runnable {
     
        public int i;
        private IEvent ie;
     
        public Worker(IEvent ie){
            this.ie = ie;
        }
     
        @Override
        public void run() {
            // TODO Auto-generated method stub
            for(int j=0; j < 1000; j++){
                i = j;
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if(j%10==0){
                    ie.stuff(j);
                }
            }
        }
     
    }
     
    Enfin 
     
    public class ProgramTest implements IEvent {
     
        public static void main(String[] args){
     
            Worker oWorker = new Worker(new ProgramTest ());
     
            Thread t = new Thread(oWorker);
            t.start();
        }
        @Override
        public void stuff(int i) {
            System.out.println("ok " + i);
     
        }
    }
    Qu'en penses tu? Sachant que je n'ai besoin que d'un seul observateur pour le moment.

    Cheers
    IRNBRU

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Tu ne perds rien à stocker une liste d'observer, ça marchera pour un seul aussi. Et éventuellement prévoir plusieurs types de notification genre progression/fin. Car certains observers seront uniquement intéressés par une fin de tâche tandis que d'autres par la progression (la barre de progression sera intéressée par les deux, tandis qu'un code métier n'aura besoin que de la notification de fin par exemple). Et comment fais tu si tu as une tâche de durée indéterminée, ou alors une tâche avec des étapes dont tu ne connais pas la durée?

  5. #5
    Membre éclairé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par défaut
    Merci pour tes pistes Sinok, donc si je comprends bien, malgré mes limitations de mon code ne prennant pas en compte tous les cas possibles, mon code va sur la bonne piste quand même? A savoir utiliser un thread (avec l'interface runnable) et une implémentation simplifiée du design pattern observer pour informer le client de l'avancement du thread dans sa tâche est-il correct?

    Cheers,
    IRNBRU

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ca me semble relativement correct comme utilisation.

    Toutefois vu que tu vas bosser en environnement multithread il serait pas mal que tu lises l'article suivant afin de pouvoir être sûr que le patter s'appllique de façon correcte.
    http://www.javaworld.com/jw-03-1999/jw-03-toolbox.html

Discussions similaires

  1. Besoin d'aide Java
    Par boinamib dans le forum Langage
    Réponses: 24
    Dernier message: 06/12/2006, 12h15
  2. aide java(fichier .chm)
    Par damned3 dans le forum Langage
    Réponses: 2
    Dernier message: 07/09/2006, 20h55
  3. Réponses: 7
    Dernier message: 11/08/2006, 09h24
  4. Aide java script diver questions
    Par Argorate dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 05/08/2006, 03h32
  5. aide java sous linux
    Par blackcrow1981 dans le forum Langage
    Réponses: 2
    Dernier message: 10/07/2006, 17h41

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