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 :

[debutant] ActionListener et variable


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club Avatar de hamham
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Points : 47
    Points
    47
    Par défaut [debutant] ActionListener et variable
    Bonjour à tous,

    une de mes classe reçoit un vector en paramètre que je dois modifier quand j'appuie sur un boutton, c'est à dire dans l'ActionListener, mais celui-ci ne veut pas.

    Voici un morceua du code :
    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
     
    public AjoutReal(FilmInfo finfo, Vector tabreal){
    ...
    bValid.addActionListener(new ActionListener(){
        public void actionPerformed (ActionEvent evenement)
        {
             Statement st = conn.createStatement();		
             String query = "SELECT NomReal, PreReal FROM realisateur " +
    		"WHERE CONCAT(PreReal,' ',NomReal) LIKE '"
    		+tReal.getSelectedItem().toString()+"'";
              ResultSet rs1 = st.executeQuery(query);
     
              while (rs1.next())
              {
    	RealInfo rinfo= new RealInfo();
                 rinfo.setNomReal(rs1.getString("NomReal"));
    	rinfo.setPreReal(rs1.getString("PreReal"));
    	tabreal.addElement(rinfo);
              }
    }
    Cannot refer to a non-final variable tabreal inside an inner class defined in a different methode
    Voici ce qu'il y a d'écrit quand je me positionne sur tabreal dans mon code.

    Connaissez vous un moyen de contourner ce problème
    Je vous remercie d'avance
    HamHam!!!

  2. #2
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Ensuite, tu travailles sur v et non sur tabreal
    "Le calendrier, c'est la bureaucratie du temps." Quino

  3. #3
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Ca veut dire ce que ça veut dire :

    Une classe interne à une méthode ne peut accéder aux variables de cette méthode uniquement si elles sont finales.
    La classe à besoin d'être sûre que les paramètres référencent toujours le même objet.

    Met tes paramètres en final et ce sera ok (D'ailleurs c'est même plutôt recommandé de toujours le faire):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public AjoutReal(final FilmInfo finfo, final Vector tabreal){
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  4. #4
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Citation Envoyé par sironimo
    Ensuite, tu travailles sur v et non sur tabreal
    L'erreur sera la même, v devra être final quand même (Sauf si je dis de grosses bêtises).
    Et puis ça tient plus du bidouillage que du code propre cette façon de faire.
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  5. #5
    Membre du Club Avatar de hamham
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Points : 47
    Points
    47
    Par défaut
    Je suis d'accord avec toi Satch, il serait mieu de les mettre en final, mais dans ce cas je ne pourrai pas les modifier, or c'est le but ici, il faut que j'ajoute un élément dans le vecteur tabreal, avant de l'envoyer à une autre page!
    HamHam!!!

  6. #6
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Citation Envoyé par hamham
    Je suis d'accord avec toi Satch, il serait mieu de les mettre en final, mais dans ce cas je ne pourrai pas les modifier, or c'est le but ici, il faut que j'ajoute un élément dans le vecteur tabreal, avant de l'envoyer à une autre page!
    Même si ton vecteur est final, tu peux quand même le modifier (appeler des méthodes comme add() dessus).
    Ce que tu ne pourras pas modifier c'est la référence de ta variable tabreal.

    Il faut bien faire la différence entre une référence à un objet et l'objet lui même.

    En résumé, tu pourras faire tabreal.add(qqch) (tabreal référence toujours le même objet, et c'est celui ci que tu modifie) mais pas tabreal=new Vector() (Là c'est la référence de tabreal que tu changes)

    Donc je t'encourage encore une fois à mettre tes paramètres en "final", et je précise une nouvelle fois que c'est même recommandé de mettre tous le temps les paramètres des méthodes en "final".
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  7. #7
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Je suis d'accord avec toi satch, autant pour moi je reconnais que ma bidouille était pas top
    "Le calendrier, c'est la bureaucratie du temps." Quino

  8. #8
    Membre du Club Avatar de hamham
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Points : 47
    Points
    47
    Par défaut
    d'accord, mais juste un dernière question, a propos des vecteurs puisque je ne comprends pas pourquoi ça ne marche toujours pas.
    Un vector s'agrandit automatiquement, que on appelle addElement(obj), elle rajoute l'objet à la fin, n'est ce pas?

    D'ou pourrait venir :
    java.lang.NullPointerException
    HamHam!!!

  9. #9
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Faudrait regarder à quelle ligne est levée cette exception.

    Une nullPointerException est levée quand tu a une variable qui ne vaut rien (null) et que tu essayes d'appeler une méthode dessus.
    Elle est balancée aussi par quelques méthodes quand on leur donne un argument null (faut lire la doc des méthodes avant de les utiliser)
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

Discussions similaires

  1. [DEBUTANT] Transformer une variable Double en STring
    Par Battosaiii dans le forum Langage
    Réponses: 6
    Dernier message: 13/06/2005, 17h43
  2. Réponses: 2
    Dernier message: 19/04/2005, 12h27
  3. [debutant] procédure et variables
    Par rohlio dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/07/2004, 19h33
  4. Réponses: 12
    Dernier message: 23/06/2004, 14h50
  5. Debutant recherche utilisation variable système
    Par agent-zaizai dans le forum C++Builder
    Réponses: 5
    Dernier message: 15/05/2003, 22h53

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