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 :

Erreur "No enclosing instance of type ..."


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Par défaut Erreur "No enclosing instance of type ..."
    Bonjour,
    Je ne suis pas un professionnel de l'informatique mais un simple passionné qui essaye d'apprendre JAVA en essayant de refaire les exemples d'un maitre du JAVA ayant écrit un tutoriel JTable je me heurte à une erreur sur la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    modele.addAmi(new Ami("C1","C2",Color.red,true));
    Pouvez vous m'aider.
    En vous remerciant tous.
    Merci d'être indulgent avec moi je ne suis ni étudiant ni un professionnel de l'informatique!

    Voici mon code en entier:
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.AbstractAction;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
     
     
     
    public class MaTable extends AbstractTableModel 
    {
        private final List<Ami>amis = new ArrayList<Ami>();
        private final String[] entetes = {"Colonne1","Colonne2","Colonne3","Colonne4"};
     
     
        public MaTable() 
        {
            super();
            amis.add(new Ami("C1","C2",Color.red,true));
            amis.add(new Ami("C11","C21",Color.black,false));
            amis.add(new Ami("C12","C22",Color.gray,true));
            amis.add(new Ami("C13","C23",Color.green,false));
     
        }
     
        // Necessite de creer les 3 methodes suivantes qd herite de AbstractTableModel sinon en erreur....    
        public int getRowCount()     
        {
            return amis.size();
        }
     
        public int getColumnCount() 
        {
            return entetes.length;
        }
     
        public Object getValueAt (int rowIndex,int columnIndex) 
        {
     
            switch (columnIndex){
                case 0:return amis.get(rowIndex).getPrenom();
                case 1:return amis.get(rowIndex).getNom();
                case 2:return amis.get(rowIndex).getColor();
                case 3:return amis.get(rowIndex).isHomme();
                default : return null;
                                }
     
        }
     
        public String getColumnName (int columnIndex) 
        {
            return entetes[columnIndex];
        }
     
        public void addAmi (Ami ami)
        {
            amis.add(ami);
            fireTableRowsInserted(amis.size()-1,amis.size()-1);
        }
     
    public class Ami     
        {
        private String nom;
        private String prenom;
        private Color couleur;
        private boolean homme;
        public Ami (String nom,String prenom,Color couleur,boolean homme)
                {
                super();
                this.nom = nom;
                this.prenom =prenom;
                this.couleur = couleur;
                this.homme=homme;     
                }
        public String getNom()
                {
                return nom;
                }
     
        public void setNom(String nom)
                {
                this.nom=nom;
                }
     
        public String getPrenom()
                {
                return prenom;
                }
     
        public void setPrenom(String prenom)
                {
                this.prenom=prenom;
                }
     
        public Color getColor()
                {
                return couleur;
                }
     
        public void setColor (Color couleur)
                {
                this.couleur = couleur;
                }
     
        public boolean isHomme()
                {
                return homme;
                }
     
        public void setHomme(boolean homme)
                {
                this.homme = homme;
                }
        }
    public static class JTableBasiqueAvecModeleDynamique extends JFrame  // affichage de notre JTable dans un JSCrollPan
        {
        private MaTable modele = new MaTable();
        private JTable tableau;
     
        public JTableBasiqueAvecModeleDynamique()
            {
            super();
            setTitle("JTABLE Modele Dynamique");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            tableau = new JTable(modele);
            getContentPane().add(new JScrollPane(tableau),BorderLayout.CENTER);
            JPanel boutons = new JPanel();
            boutons.add(new JButton("ajouter"));
            boutons.add(new JButton("supprimer"));
            getContentPane().add(boutons,BorderLayout.SOUTH);
            modele.addAmi(new Ami("C1","C2",Color.red,true));// Mon problème se situe ici!!!
            pack();    
     
            }
     
        }
    public static void main (String[] args)
        {
        new JTableBasiqueAvecModeleDynamique().setVisible(true);
     
        }
     
    }

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    J'ai regardé rapidement ton code, il serait pratique que tu nous précises quelle est l'erreur que te mentionne ton Eclipse. Déjà, je suppose que si c'est ton Eclipse qui râle c'est une erreur dès la compilation (et que donc potentiellement nous aurons peut être besoin de voir ta classe Ami (tout du moins le constructeur utilisé).
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Membre confirmé
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Par défaut message d'erreurs
    Bonsoir Monsieur ROBIN voici le message au niveau de la ligne :
    "modele.addAmi(new Ami("C1","C2",Color.red,true));"

    Multiple markers at this line
    - No enclosing instance of type MaTable is accessible. Must qualify the allocation with an enclosing instance of type MaTable (e.g. x.new A() where x is an instance of
    MaTable).

    En vous remerciant encore de vous pencher sur mon problème.
    Bien cordialement

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    J'avais pas compris tout de suite le message d'erreur je ne l'avais jamais rencontré. En fait en général, quand tu fais le lanceur de ton application, fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public MaClasse {
     
      public void maMethodeDeDepart() {
        // code divers
      }
     
      public static void main(String[] args) {
        MaClasse classe = new MaClasse();
        classe.maMethodeDeDepart();
      }
    }
    Ainsi dans ton cas, tu peux :
    1. Supprimer ton static sur ta classe JTableBasiqueAvecModeleDynamique
    2. Déclarer dans ton main quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JFrame frame = new JTableBasiqueAvecModeleDynamique();
    frame.show();
    Je pense que ça devrait marcher comme ça.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par johanndebutant Voir le message
    Multiple markers at this line
    - No enclosing instance of type MaTable is accessible. Must qualify the allocation with an enclosing instance of type MaTable (e.g. x.new A() where x is an instance of
    MaTable).
    Cette erreur signifie que tu cherches à instancier une classe interne en dehors de sa classe englobante. La classe Ami est interne à la classe MaTable : elle ne peut être instanciée que dans le contexte d'une instance de classe MaTable. Tu ne peux pas créer d'instances de classe Ami dans le constructeur de la classe static JTableBasiqueAvecModeleDynamique, qui est, de fait, une autre classe que MaTable. Fais des classes "normales", pas internes : un fichier par classe (classe MaTable dans MaTable.java, classe Ami dans Ami.java, et classe JTableBasiqueAvecModeleDynamique dans JTableBasiqueAvecModeleDynamique.java. C'est le moyen le plus simple pour pouvoir instancier Ami à la fois dans MaTable et dans JTableBasiqueAvecModeleDynamique.

    Pour ce qui est des numéros que tu indiques dans le titre, ce ne sont pas des numéros d'erreur, mais des numéros des lignes par lesquelles la pile d'appels passe pour arriver à l'erreur : hors contexte (sans le source avec les lignes exactement au même endroit, et la stack trace de l'exception), c'est totalement inutile. En tout cas, ça ne sert à rien dans le titre de la discussion. Et, d'autant plus qu'il s'agit d'une erreur de compilation, qui t'a été signalée avant que tu exécutes ton programme.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre confirmé
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Par défaut
    Merci à Monsieur ROBIN et à Monsieur DRIGO pour vos réponses je viens d'apprendre grâce à vous encore pleins de choses. Je réécris mon programme et je pense que ça devrait marcher.
    Merci encore à vous deux .
    Ca marche super bien encore Merci

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

Discussions similaires

  1. [VB]probleme double quote dans une ressource de type string
    Par JulienCEA dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/02/2006, 12h38
  2. [débutant] erreur "indice de liste hors limites(1)"
    Par lidouka dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 14h31

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