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 :

enclosing instance is requiered


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Par défaut enclosing instance is requiered
    Bonjour à tous,

    Etant donné que je suis débutant, je suppose que c'est encore une erreur de débutant

    Voila, j'ai créé un bean (LdapBean.java) qui contient le code suivant:
    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
     
    ...
    public class User implements DirContext{
    Attributes myAttrs = new BasicAttributes(true);
    Attribute oc = new BasicAttributes("objectclass");
     
    public User(String dn, String cn, String sn){
    oc.add("person");
    oc.add("inetOrgPerson");
    oc.add("organizationalPerson");
    myAttrs.put(oc);
    myAttrs.put("dn",dn);
    myAttrs.put("cn",cn);
    myAttrs.put("sn",sn);
    }
    ...
    }
    Et je voudrais instancier "User" dans mon Main.java. Je m'y suis pris comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    LdapBean LdapBean = new LdapBean();
    ...
    LdapBean.User p1 = new LdapBean.User();
    Et là , netbean me dit:

    an enclosing instance that contains ldapfeeder.LdapBean.User is required.

    Google ne m'a pas donner de solution, je ne suis même pas sur de comprendre le message d'erreur. Je pense que je ne peux pas instancier de classe User dans le Main.java parceque la classe User n'y est pas défini, mais je ne vois pas comment y remédier sans recopier tout le code de mon bean (chuis même pas sur que ça marcherais de toute façon en plus de ne pas être propre )

    D'avance merci beaucoup

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    ton ldapBean devrait avoir un constructeur qui crée le user je pense.

    enfin, il devrait avoir un attribut user et l'instancier lui meme je pense?

    Ca fait longtemps que j'ai pas fait de Bean, mais ça parait bizarre ce que tu fais

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Par défaut
    Salut In,

    Ben si je me souviens bien, ce qui caractérise un bean, c'est qu'il n'y a pas de constructeur, non?

    En quoi ça te parait bizarre, je suis sur que je m'y suis mal pris

  4. #4
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    non.

    pour moi (je me trompe peut etre) un bean possède forcément un constructeur vide et des getteres et des setters sur ses attributs. Ce qui n'empeche pas d'avoir plusieurs constructuers.

    Mais bon je crois que j'avais mal lu ton code. cependant ça me parait bizzare (à la vue de l'extrait de code en tous cas) que tu fasses new LdapBean si ta classe c'est User. A moins que User soit une inner class de LdapBean. Dans ce cas, je pense que c'est au constructeur de LdapBean de faire l'appel à new User. Et ton bean devrait avoir un attribut de type user.

    Sinon pour ton bean, tu crée une méthode style creeUser() qui instancie ton attribut User. Ce qui revient au meme qu'avec un constructeur.

    mais bon tu auras peut etre (surement) de plus grandes chances dans le forum J2EE, demande peut etre à un modérateur de dépalcer ton post ...

  5. #5
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Citation Envoyé par scolyo
    Et je voudrais instancier "User" dans mon Main.java.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static void main(String[] args) {
      User p1 = new User("dn","cn","sn");
    }
    Y'a des bons tutos sur Java ici avant de commencer à coder.

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

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    pour instancier une classe interne, si elle n'est pas statique, on a besoin d'une instance de la classe englobante.

    Quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LdapBean.User p1 = new LdapBean.User();
    tu agis comme si la classe User était statique.

    pour instancier une classe interne non statique, il faut faire (dans ton cas) ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LdapBean LdapBean = new LdapBean();
    ...
    LdapBean.User p1 = LdapBean.new User();
    Ici, "LdapBean" n'est pas le nom de la classe mais la variable que tu as créé au dessus.
    D'ailleurs je t'encourage à ne pas nommer tes variables avec une majuscule pour éviter la confusion. et donc faire plutôt ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LdapBean ldapBean = new LdapBean();
    ...
    LdapBean.User p1 = ldapBean.new User();
    EDIT : Comme dit plus haut, vu que tu n'as pas de constructeur par défaut, il te faut utiliser celui que tu as défini.

    RE-EDIT :
    Citation Envoyé par g_rare
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static void main(String[] args) {
      User p1 = new User("dn","cn","sn");
    }
    Ceci ne peut pas marcher pour les raisons que j'ai évoquées plus haut.

  7. #7
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Bon de toute façon, dans tous les cas (si jamais la classe de ton "bean" était bien interne à une autre) il est récommandé de séparer les classes dans différents fichiers en Java (sauf cas particulier où une classe n'est jamais utilisé comme outils en dehors d'une autre) : donc il te faut tes 2 classes "User" et "LdapBean" respectivement dans 2 fichiers "User.java" et "LdapBean.java".

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Par défaut
    ça y est, j'ai réussi. En fait, il fallait que je créé un fichier User.java, comme vous me l'aviez dit, et que je l'appel tous simplement dans mon Main.

    Ce que j'ai potassé dernièrement concernait exclusivement les javaBean, donc du coup, j'ai oublié les choses plus simple

    En ce qui concerne les tutos du site, ceux de SergeTahé et de JM Doudoux sont mes livres de chevet mais, je comprend pas forcément tout

    Merci encore de votre aide et de vos explications.

    @+

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

Discussions similaires

  1. Erreur "No enclosing instance of type ..."
    Par johanndebutant dans le forum Débuter
    Réponses: 5
    Dernier message: 12/02/2014, 14h11
  2. Problème "No enclosing instance of the type is accessible in scope"
    Par Ludix_ dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 20/01/2014, 13h58
  3. No enclosing instance ( générécité)
    Par cashmoney dans le forum JDBC
    Réponses: 4
    Dernier message: 20/04/2009, 10h42
  4. [VB6]Passer le focus à une instance précedente
    Par Jeremiah dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 16/09/2003, 10h01
  5. [] plusieurs instances de form avec leur contexte ?
    Par Seb-31 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 11/04/2003, 13h56

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