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

avec Java Discussion :

récupérer valeur dans une class


Sujet :

avec Java

  1. #1
    Inactif
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut récupérer valeur dans une class
    Bonjour,

    Une question de débutant à vous poser :

    Comment fait-on pour récupérer depuis une autre class un paramètre obtenu dans le start d'une applet ?

    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
     
    package org.fi.demo;
    import javax.swing.*;
    import org.fi.*;
     
    public class RSApplet extends JApplet {
     
    public RSApplet() {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
    e.printStackTrace();
    }
    setRootPane(new Dane());
    }
     
    public void start() {
    String parm = getParameter("val");
    JOptionPane.showMessageDialog(null, parm);
    super.start();
    ((Dane)getRootPane()).focusTextArea();
    }
    }
    Comment récupérer la valeur parm depuis une autre class ? En espérant que ce soit clair...

    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Eh bien, par exemple, tu peux stocker cette valeur dans une variable de classe, et y accéder ensuite par un accesseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class RSApplet extends JApplet
    {
       private String parm;
     
       public void start() {
          this.parm = getParameter("val");
          // ...
       }
     
       public String getParm() {
          return parm;
       }
    }
    Depuis ton "autre classe" tu n'as plus qu'à appeler getParm() sur ton instance de RSApplet.

  3. #3
    Inactif
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Bonjour Astartee,

    Pendant qu'on y est, saurais-tu pourquoi j'obtiens cette erreur quand j'essaie d'appliquer ta méthode ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    invalid method declaration; return type required
    public getParm() {
    Merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Un peu de sens critique, voyons !
    J'ai évidemment oublié le type de retour (i.e. String) dans mon code, comme te l'indique d'ailleurs le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String getParm() {...}

  5. #5
    Inactif
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Pourtant j'avais essayé en ajoutant string seulement j'avais oublié la majuscule

    Je reviens si j'ai un autre prob. En attendant merci

  6. #6
    Inactif
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Bon bon bon, décidément c'est dur la vie de newbie...

    J'ai essayé plusieurs méthodes mais rien à faire ya toujours la même erreur qui revient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import org.fi.RSApplet; // le nom de la class où se trouve l'init
     
    ...
     
    public void calledMethod(RSApplet aRef) {
    aRef.getParm();
    }
     
    ...
    et une autre plus commode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import org.fi.RSApplet; // le nom de la class où se trouve l'init
     
    ...
     
    RSApplet aRef= new RSApplet();
    aRef.getParm();
     
    ...
    Le compilo ne reconnait jamais getParm() apparemment

    cannot find symbol
    symbol : method getParm()
    location: class org.fi.RSApplet
    aRef.getParm();
    ^
    Je dois oublier quelque chose mais je ne sais absolument pas quoi !

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Peux-tu poster à nouveau le code complet minimal qui compile ? Car tu as fait des modifications, mais je n'arrive plus à te suivre
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  8. #8
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    As-tu defini une fonction getParm() dans ta class RSApplet?

    De plus, faire:
    ne sert a rien, tu ne l'utilise pas et tu ne la stock pas non plus, sauf si tu te sert du getParm() pour initialiser ta variable parm dans ta classe RSApplet.
    La javaDoc est mon amie, elle est la tienne aussi!

  9. #9
    Inactif
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Re à tous,

    En fait je n'ai rien touché à ce qui a fonctionner. En fait le problème se situe à maintenant à ce niveau :

    Depuis ton "autre classe" tu n'as plus qu'à appeler getParm() sur ton instance de RSApplet.
    ...sachant que "l'autre class" en question se trouve dans un fichier, une class à part.

    Pour résumer, dans cet autre fichier j'importe la class, une instance est créé sur cette class puis la fonction getParm() est appelée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import org.fi.RSApplet; // le nom de la class où se trouve le start
     
    ...
     
    RSApplet aRef= new RSApplet();
    aRef.getParm();
     
    ...
    Et là c'est le drame, à la compilation de cet autre fichier j'obtiens cette nouvelle erreur :

    cannot find symbol
    symbol : method getParm()
    location: class org.fi.RSApplet
    aRef.getParm();
    Autrement dit ça ne vient pas du code donné par Astartee, ça vient des 3 misérables lignes ajoutées à cet autre fichier/class.

    Vous comprenez ?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Visiblement, la modification de RSApplet (avec création de la méthode getParm) n'est pas prise en compte lors de la compilation : la méthode n'est pas reconnue.
    Et a priori ce n'est pas normal... il n'y a aucune raison pour qu'un appel aussi basique échoue

    Quelques idées :

    Quand tu dis "à la compilation de cet autre fichier", veux-tu dire que tu compiles chaque classe séparément ? ta formulation m'intrigue
    Si jamais tu as deux projets (le premier contenant la classe RSApplet, le deuxième ayant une dépendance vers une version compilée du premier), es-tu bien sûr d'avoir mis à jour la librairie utilisée dans le deuxième projet ?

    Dans ton premier message tu places la classe RSApplet modifiée dans le package org.fi.demo, dans tes derniers messages tu importes la classe RSApplet du package org.fi : est-ce que tu as changé tes noms de package entre temps ou est-ce qu'il existe réellement deux classes différentes dans deux packages différents ?
    Dans le deuxième cas il faut évidemment importer la bonne classe...

    Est-ce que la méthode getParm est bien publique ? (on ne sait jamais...)

  11. #11
    Inactif
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Si tu ne vois pas d'erreur dans les 3 lignes code données précédemment (je ne suis sûr de rien si bien que je doute de tout ), ça vient probablement de la manière dont je compile cette class...

    Et vi, ça venait bien de la compilation : jusqu'à maintenant je compilai les class (effectivement séparément) mais sans inclure le jar dans un classpath ! Donc le compilo ne voyait jamais rien...

    Alala, merci en tout cas !

  12. #12
    Inactif
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Rebelote,

    Astartee, ta soluce ne peut pas fonctionner et pour cause :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class RSApplet extends JApplet
    {
       private String parm;
     
       public void start() {
          this.parm = getParameter("val");
          // ...
       }
     
       public String getParm() {
          return parm;
       }
    }
    En effet, dans la mesure où parm est défini dans start(), getParm() ne peut renvoyer que null...hé oui

    En fait, j'ai l'impression qu'il faut s'y prendre "à l'inverse" CAD renvoyer en paramètre et dans une fonction le string parm...c'est d'ailleurs ce que j'ai essayé de faire (avec un succès mitigé) mais avant de chercher plus loin, j'aimerais connaitre votre méthode (si toutefois vous en possédez une ).

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par members Voir le message
    Astartee, ta soluce ne peut pas fonctionner et pour cause :
    En effet, dans la mesure où parm est défini dans start(), getParm() ne peut renvoyer que null...hé oui
    C'est toi qui as dit dans ton premier message que la variable devait être "obtenu[e] dans le start d'une applet"
    Si tu appelles getParm() avant d'appeler start() (ou si tu utilises la variable parm dans ton code avant d'appeler start()), effectivement tu vas récupérer null. Si tu utilises parm après avoir appelé start(), pas de problème.
    Si tu veux être sûr que la variable parm soit toujours bien renseignée, dès la création de l'objet RSApplet, alors il faut placer l'instruction qui renseigne la variable dans le constructeur (et non dans la méthode start), ce qui serait effectivement plus propre, même s'il y a peu de raison que tu utilises une applet sans appeler sa méthode start...

    Citation Envoyé par members Voir le message
    En fait, j'ai l'impression qu'il faut s'y prendre "à l'inverse" CAD renvoyer en paramètre et dans une fonction le string parm...
    Tu veux faire une sorte de paramètre "out" dans ta méthode ?
    Ça va être difficile en Java... Si tu passes un objet en paramètre d'une méthode, alors tu peux modifier cet objet dans la méthode, mais les String sont non mutables donc à moins d'encapsuler la chaîne de caractère dans une classe ça ne va pas marcher. Enfin, ça me paraît un peu tiré par les cheveux.

  14. #14
    Inactif
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Astartee Voir le message
    C'est toi qui as dit dans ton premier message que la variable devait être "obtenu[e] dans le start d'une applet"
    ...
    Autant pour moi
    Tu auras compris que je n'y connaissais rien en java (mais ça vient doucement notamment grâce à toi ). Dans mon esprit la méthode start était la première chose qui était appelée dans une applet...et avant tout autre instruction.

    N'empêche, c'eût été plus simple si java avait pu exécuter getParameter() après et en dehors de l'init !

    Citation Envoyé par Astartee Voir le message
    Si tu veux être sûr que la variable parm soit toujours bien renseignée, dès la création de l'objet RSApplet, alors il faut placer l'instruction qui renseigne la variable dans le constructeur (et non dans la méthode start)
    J'ignorai qu'on pouvait s'y prendre ainsi. Je vais regarder dans cette direction. Merci Astartee

    Citation Envoyé par Astartee Voir le message
    Tu veux faire une sorte de paramètre "out" dans ta méthode ?
    ...
    Enfin, ça me paraît un peu tiré par les cheveux.
    Oui tu peux même dire tarabiscoté voire crade. Que veux-tu : on fait avec les moyens du bord aussi et avec des stratagèmes hérités d'autres langages ! (pour info, j'y suis quand même parvenu[<strike>e</strike>] ainsi...)

  15. #15
    Inactif
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Astartee Voir le message
    Si tu veux être sûr que la variable parm soit toujours bien renseignée, dès la création de l'objet RSApplet, alors il faut placer l'instruction qui renseigne la variable dans le constructeur (et non dans la méthode start), ce qui serait effectivement plus propre, même s'il y a peu de raison que tu utilises une applet sans appeler sa méthode start...
    Bin non ya pas moyen comme ça : getParameter() ne s'exécute (à ma connaissance) que dans le start sous une applet

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 432
    Points
    432
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class RSApplet extends JApplet
    {
       private String parm;
     
       public void start() {
          this.parm = getParameter("val");
          // ...
       }
     
       public String getParm() {
          return parm;
       }
    }
    Tout est faux dans ce code ... Il faut que tu lises des cours sur la programmation orienté objet, sinon tu vas pas y arriver.


    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
     
    public class RSApplet extends JApplet
    {
       private String parm;
     
       // constructeur
       public RSApplet(){
          parm = "ma valeur";
       }
     
       public void start() {
     
          System.out.println(parm);
          //changer la valeur de parm
           parm = "une autre valeur";
          System.out.println(parm);
     
       }
     
       //accesseur à utiliser en dehors de la classe RSApplet
       public String getParm() {
          return parm;
       }
     
       public void setParm(String uneAutreValeur) {
          this.parm = uneAutreValeur;
       }
    }

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par Elendhil Voir le message
    [CODE]Il faut que tu lises des cours sur la programmation orienté objet, sinon tu vas pas y arriver.
    mais encore ? tu as peut-être des arguments à faire valoir ?
    Remarques par rapport à ton code :
    - tu as rajouté un setter... à ce que je sache members n'a pas demandé à pouvoir modifier la variable parm (que je lui ai suggéré d'ajouter... donc lui n'en avait pas besoin de cette variable) depuis une autre classe
    - tu peux bien t'amuser à remplir parm avec une valeur bidon dans le constructeur, ça ne change rien au problème, on s'en moque de cette valeur
    - toi aussi tu modifies parm dans la méthode start, donc je ne vois pas la différence avec mon code


    Citation Envoyé par members Voir le message
    Bin non ya pas moyen comme ça : getParameter() ne s'exécute (à ma connaissance) que dans le start sous une applet
    Je ne connais pas tes contraintes, et je ne connais pas spécialement le fonctionnement des applets, mais d'un point de vue strictement "Java":
    Si la valeur que tu cherches à obtenir ne peut-être obtenue que par la méthode getParameter, et si cette méthode ne peut être appelée que dans le start de l'applet, alors logiquement il en résulte que tu ne peux de toutes façons connaître cette valeur que après avoir appelé la méthode start...
    Dans ton autre classe, que comptais-tu faire ? appeler start, puis récupérer la valeur du paramètre lu dans cette méthode, non ? Dans ce cas, tu appelles start, puis tu appelles getParm.

    Dans tout ça je parle évidemment d'un traitement "linéaire". Si jamais tu utilises des threads ça risque d'être plus compliqué...

    Peux-tu montrer le traitement que tu comptais faire dans ton "autre classe" ?

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 432
    Points
    432
    Par défaut
    Oups j'ai écris n'importe quoi , j'avais pas compris qu'il voulait récupérer les paramètres passés à une applet,
    mais plutôt qu'il ne comprenait pas ce qu'étais un constructeur ou encore les "setters/getters"....


    Donc pour une applet tu ajoutes dans le code html une balise paramètre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <param name="text" value="Hello World !">
    Ensuite le navigateur récupère les paramètres pour les passer à l'applet.

    Le cycle de vie de l'applet est la suivante :

    init() -> start() -> stop() -> destroy()

    La méthode init va servir à initialiser l'applet avant son lancement.

    Donc pour récupérer les paramètres passées en effet on utilise la méthode de la classe mère Applet : getParameter() .

    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
     
    public class RSApplet extends JApplet
    {
      private String parm;
      private boolean finished =  false;
      Thread monThread;
     
      public void init(){
         // tu récupère la chaine "hello world !"
         parm = getParameter("text"); 
         // Ensuite tu peux traiter ton paramètre comme tu l'entends 
         // avant l'appel de la méthode start
      }
     
      public void start() {
          monThread = new Thread() {
                                 public void run() {
                                     while(!finished){
                                        //ici la boucle  de ton applet
                                        // Tu peux utiliser ton paramètre ici
                                     }
                                 }
                             };
         monThread.start(); 
       }
     
      ...
     
    }

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

Discussions similaires

  1. Récupérer Entry / dans une classe
    Par santaflam dans le forum Tkinter
    Réponses: 1
    Dernier message: 15/09/2009, 15h53
  2. [AC-2003] Macro - Récupérer valeur dans une requête
    Par damsmut dans le forum Modélisation
    Réponses: 5
    Dernier message: 16/06/2009, 16h17
  3. Réponses: 9
    Dernier message: 26/11/2007, 09h50
  4. Acces aux valeurs dans une classe
    Par Seth77 dans le forum C#
    Réponses: 1
    Dernier message: 12/05/2007, 16h00
  5. Récupérer valeur dans une BD
    Par Matmal11 dans le forum Linux
    Réponses: 6
    Dernier message: 05/09/2006, 16h28

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