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 :

Gestion appel methode


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur de projets
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur de projets
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut Gestion appel methode
    Bonjour,

    Voila, j'ai une classe A (qui extends un JPanel) dans laquelle j'ai une méthode d'initialisation du design (JPanel, JButton etc...) et une autre méthode qui me permet de chercher des valeurs depuis un fichier texte et un automate.


    J'ai une autre classe B qui est mon applet et qui instancie A sur appuis d'un bouton (gestion d'un ActionListener).


    Donc ce que j'aimerai savoir, ou plutot la source de mon problème, est que j'aimerai garantir que mon design de A soit bien affiché avant de lancer la lecture de données.


    Voici quelques lignes pour illustrer mon probleme:

    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
     
    //Classe A avec design et lecture de données
    class classA extends JPanel{
        //Divers variables
     
        //Le constructeur
        classA{
            //Appel de mon design
            initDesign()
        }//end of constructor
     
        //METHODE================
        public readData(){
            ...
            ... bla bla bla =)
            ...
        }
    }//end of class
    puis
    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
    //Code de mon applet
    public class classB extends java.applet.Applet {
     
        //declaration de variable
        private classA maClassA;
     
        public void init() {
            try {
                java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    //divers initialisations de graphisme + mes boutons
                }
            }
        }
     
     
        ActionListener buttonActionListener = new ActionListener() {
            //Detection de la source
            if(source == monBouton){
                maClassA = new classA();
                 this.add(maClassA);
                this.validate();
                maClassA.readData();
            }
    }//End of class

    Donc tel que je l'ai codé, lors de l'affichage de l'applet et suite à l'appui du bouton, j'ai:
    1. la construction qui se déroule (j'ai des System.out.... pour vérifier)
    2. au lieu d'afficher le design de "maClassA", il enchaine sur l'appel
    3. finalement apres lecture, j'ai tout qui s'affiche


    alors que j'aimerai coder:
    1. construction du design
    2. affichage du design avec message "en chargement" dans un JLabel
    3. affichage terminé
    4. appeler readData()
    5. mise à jour de l'affichage (avec les données)



    Bon voila, j'espere avoir été clair. si besoin est, je peux apporter des info complémentaires.

    Merci d'avance pour les pistes...

  2. #2
    Membre très actif Avatar de taha1
    Femme Profil pro
    débutantE ^ ^
    Inscrit en
    Mai 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : débutantE ^ ^

    Informations forums :
    Inscription : Mai 2009
    Messages : 106
    Par défaut
    Je sais pas si ça peut aider mais tu peux utiliser une méthode wait pour n seconde dans ta classe B entre l'affichage de ton panel et ton read data
    voilà là la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void wait (int n){
     long t0,t1;
    t0=System.currentTimeMillis();
    do{
          t1=System.currentTimeMillis();
      }
      while (t1-t0<n*1000);
    }
    je l'ai trouvé sur internet

  3. #3
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    L'utilisation d'une attente n'est pas vraiment une solution prorpe et la fonction wait() que tu propose l'est d'autant moins.
    En effet, elle fait une attente active avec une boucle infinie qui tourne en permanence. Pour une attente, mieux vaut regarder du coté des classes Timer(java.util ou java.swing) ou le la méthode wait() de la classe Objet.

  4. #4
    Membre très actif Avatar de taha1
    Femme Profil pro
    débutantE ^ ^
    Inscrit en
    Mai 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : débutantE ^ ^

    Informations forums :
    Inscription : Mai 2009
    Messages : 106
    Par défaut

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur de projets
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur de projets
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    Bonjour,

    Tout d'abord, merci pour la réponse (à vous deux d'ailleurs)

    Citation Envoyé par Uther Voir le message
    Pour une attente, mieux vaut regarder du coté des classes Timer(java.util ou java.swing) ou le la méthode wait() de la classe Objet.
    Selon tes conseils, j'ai regardé du côté (de chez swan ... pffff ) de la classe Timer (javax.swing).
    J'en ai compris qu'un Timer ne correspond pas à mes besoins car ils servent ):
    1- exécuter une tache cycliquement;
    2- exécuter une tache une fois, après un délai.
    la solution 2 pourrait me convenir sauf que j'ai expérimenté d'ajouter un "Thread.sleep(5000);" entre mon affichage et ma demande de lecture: résultat, j'attend bien 5s, mais l'affichage ne s'est pas exécuté (il attend toujorus de tout finir pour afficher).


    Ensuite j'ai lu des choses sur la méthode "wait()". Et la, c'est le drame, j'ia pas tout compris
    Premièrement, il me semble que cela ne fonctionne que si j'utilise un Thread, or ce n'est pas le cas.

    Deuxièmement, j'ai essayé d'utiliser la technique de "synchronisation de méthode". Car si j'ai bien compris (du moins ce passage), en synchronisant des méthodes dans un objet, cela les empêchent les interferations : elles attendent que chaque méthode s'acheve avant de se lancer.
    Donc j'avais synchronisé mon initialisation du design et ma lecture de données (respectivement initDesign() et readData() de ma classe "maClasseA").


    Dernièrement, j'ai lu plus loin dans la même doc, qu'on pouvait appeler wait() et notify() dans des blocs synchronisés.
    Donc j'ai ajouté dans le "readData()" un wait() et un notify() à la fin de mon "initDesign()".
    Malheureusement, mon wait(), ben .... il wait.... lol du coup tout se bloque.



    Bon après, je pense que j'ai du mal comprendre un truc pour que ca ne marche pas. Alors je continue


    Les idées sont toujours les bienvenues

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur de projets
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur de projets
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    Bon,


    encore une fois, mon incompréhension m'a rendu aveugle.... lol


    Je corrige ce que j'ai dis dans le poste précédent.
    ---je m'auto cite
    Selon tes conseils, j'ai regardé du côté (de chez swan ... pffff ) de la classe Timer (javax.swing).
    J'en ai compris qu'un Timer ne correspond pas à mes besoins car ils servent ):
    1- exécuter une tache cycliquement;
    2- exécuter une tache une fois, après un délai.
    la solution 2 pourrait me convenir sauf que j'ai expérimenté d'ajouter un "Thread.sleep(5000);" entre mon affichage et ma demande de lecture: résultat, j'attend bien 5s, mais l'affichage ne s'est pas exécuté (il attend toujorus de tout finir pour afficher).
    Hors mis la blague à deux francs, je retire le :"J'en ai compris qu'un Timer ne correspond pas à mes besoins "

    En effet, j'ai bien relu les doc, et j'ai tout de meme tester la solution 2 mais avec un Timer et non pas le Thread.

    Donc, cela fonctionne., mille merci



    Voici juste comment j'ai procédé dans le code de la classe B:
    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
     
    //Code de mon applet
    public class classB extends java.applet.Applet {
     
        //declaration de variable
        private classA maClassA;
     
        public void init() {
            try {
                java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    //divers initialisations de graphisme + mes boutons
                }
            }
        }
     
     
        ActionListener buttonActionListener = new ActionListener() {
            //Detection de la source
            if(source == monBouton){
                maClassA = new classA();
                 this.add(maClassA);
                this.validate();
     
               Timer timer = new Timer(5000, new ActionListener() {
     
                            public void actionPerformed(ActionEvent e) {
                                maClassA.readData();
                            }
                        });
                        timer.setRepeats(false);
                        timer.start();
            }
    }//End of class

    et le miracle fut.


    Encore merci

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

Discussions similaires

  1. Appel methode java en javascript
    Par foubou dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 12/06/2008, 16h31
  2. [POO] Appel methode d'un objet de façon recursive
    Par sbernard dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/12/2007, 10h41
  3. Appelle methode d'une JFrame d'une autre classe
    Par steftanguy dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 23/08/2007, 11h01
  4. [EJB] AbstractMethodError en appelant methode de l'EJB
    Par jeb001 dans le forum Java EE
    Réponses: 3
    Dernier message: 28/03/2007, 16h44
  5. [C#][WebServices] Appel methode avec une classe en paramètre
    Par bran_noz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/09/2004, 16h41

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