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

NetBeans Java Discussion :

Static Context dans une classe non qualifiée


Sujet :

NetBeans Java

  1. #1
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Static Context dans une classe non qualifiée
    Bonjour,
    NetBeans me met régulièrement des échecs d'appel de méthode avec le message non static methode xx() cannot be referenced from a static context.
    Mais je ne vois pas ce qui créer le contexte static. la classe appelante n'est pas qualifiée static. J'ai retiré dans une classe lié l'ensemble de variables static et ça n'a rien changé.
    Comment dire que la classe n'est pas static?
    J'ai essayé de mettre cette méthode dans une autre classe pour avoir un autre contexte et j'ai les méthodes de la classe d'origine qui ont le même statut. Soit le contexte de la classe ex-appelante est static et le statut de la nouvelle classe devrai être bonne soit le message de NetBeans est incohérent.
    Je vous communique ci-après une partie du code. Je lui ai introduit les adressage absolue des méthodes par ce qu'il ne reconnaissait pas les import.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       Element element = null;
     
        IlvSDMDocument doc = ilog.views.sdm.gui.IlvSDMMdiEditor.createDocument();
        ilog.views.sdm.gui.IlvSDMMdiEditor.newGrapherView();
        alitec.matelo.editor.mceditor.MCE_Editor.initDocument();
        MCE_DOMSDM Pdom = new MCE_DOMSDM("", alitec.matelo.editor.mceditor.MCE_Editor.getCurrentVersion(), MCE_Constantes.oSUBCHAIN);
        ilog.views.sdm.gui.IlvSDMMdiEditor.getDocumentController().getActiveDocument().getEngine().setXMLConnector(Pdom);
        ilog.views.sdm.gui.action.JNMImportAction.createSubUM( macroState);
        ilog.views.sdm.gui.IlvSDMMdiEditor.getDocumentController().getActiveDocument().saveXMLAs(macroState);
        doc.AddMapProba( alitec.matelo.editor.mceditor.MCE_Editor.getObCurrentModel().getMapEvent());
    toutes ces lignes sont tagués par NetBeans de non static from static context
    et j'ai essayé de mettre les import précis en abandonant la designation absolue des primitives et sauf exception (MCE_DOMSDM) les objets de ces classes ne sont pas reconnus
    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
     
    package Linguistic;
     
    import alitec.matelo.editor.mceditor.MCE_Constantes;
    import alitec.matelo.editor.mcexceptions.MCX_UMLException;
    import alitec.matelo.editor.mceditor.MCE_DOMSDM;
    import alitec.matelo.editor.mceditor.MCE_Editor;
    import ilog.views.sdm.gui.IlvSDMDocument;
    import ilog.views.sdm.gui.IlvSDMMdiEditor;
    import ilog.views.sdm.gui.action.JNMImportAction;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import org.w3c.dom.Element;
     
    /**
     *
     * @author JNMartin
     */
    public class CreateChain
    {
     
     
    public void CreateNewSubChain( String macroState)
    {
        Element element = null;
     
        IlvSDMDocument doc = createDocument();
        newGrapherView();
        initDocument();
        MCE_DOMSDM Pdom = new MCE_DOMSDM("", getCurrentVersion(), MCE_Constantes.oSUBCHAIN);
        getDocumentController().getActiveDocument().getEngine().setXMLConnector(Pdom);
        createSubUM( macroState);
        getDocumentController().getActiveDocument().saveXMLAs(macroState);
        doc.AddMapProba( getObCurrentModel().getMapEvent());
        try
        {
            element = Element.class.newInstance();
        }
        catch (InstantiationException ex)
        {
             Logger.getLogger(JNMImportAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (IllegalAccessException ex)
        {
             Logger.getLogger(JNMImportAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        element.setAttribute("name", macroState);
        try
        {
            createSubChain( element);
        }
        catch (MCX_UMLException ex)
        {
             Logger.getLogger(JNMImportAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        }
    }
    D'autre part les méthodes qui ne sont pas reconnues par le compilateur sont reconnues dans une autre classe;
    Je suis donc revenu au code qui marche dans l'autre classe avec une granularité fine dans les import
    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package Linguistic;
     
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    import ilog.views.sdm.gui.action.*;
    import ilog.views.sdm.gui.*;
    import ilog.views.sdm.gui.IlvSDMDocument;
    import ilog.views.sdm.gui.IlvSDMMdiEditor;
    import ilog.views.sdm.gui.action.JNMImportAction;
     
    import alitec.matelo.editor.mceditor.MCE_Constantes;
    import alitec.matelo.editor.mceditor.MCE_DOMSDM;
    import alitec.matelo.editor.mceditor.MCE_Editor;
     
    import alitec.matelo.editor.mcexceptions.*;
     
    import org.w3c.dom.Element;
     
    /**
     *
     * @author JNMartin
     */
    public class CreateChain
    {
     
      public void CreateNewSubChain( String macroState)
      {
        Element element = null;
     
        IlvSDMDocument doc = createDocument();
        newGrapherView();
        initDocument();
        MCE_DOMSDM Pdom = new MCE_DOMSDM("", getCurrentVersion(), MCE_Constantes.oSUBCHAIN);
        getDocumentController().getActiveDocument().getEngine().setXMLConnector(Pdom);
        createSubUM( macroState);
        getDocumentController().getActiveDocument().saveXMLAs( macroState);
        doc.AddMapProba( getObCurrentModel().getMapEvent());
        try
        {
            element = Element.class.newInstance();
        }
        catch (InstantiationException ex)
        {
             Logger.getLogger(JNMImportAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (IllegalAccessException ex)
        {
             Logger.getLogger(JNMImportAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        element.setAttribute("name", macroState);
        try
        {
            createSubChain( element);
        }
        catch (MCX_UMLException ex)
        {
             Logger.getLogger(JNMImportAction.class.getName()).log(Level.SEVERE, null, ex);
        }
      }
    }
    Il y a selon les cas 10 à 12 erreurs de compilation dans cette application avec le même statut ( non static ou cannot find symbol, mais ce dernier semble cacher le premier). En outre les import qui sont connus comme étant porteur de symboles déclarés inconnus sont déclarés surnuméraires par NetBeans.
    Nous avons donc deux problèmes à résoudre:
    1° comment faire pour que les symboles désignés dans les imports soient reconnus par NetBeans;
    2° comment faire pour qu'un code soit déclaré non static
    et Finalement se problème se réduit au 2°
    il ne trouve pas les méthodes (non static) car elles ne sont pas déclarés statiques et donc il faut que je change le contexte de l'appel pour être non static ou que j'ai une méthode pour appeler des méthodes non static dans un contexte static.
    pour avoir plus d'information sur l'origine de l'anomalie, j'ai donc crée une nouvelle classe, avec un niveau d'import minimal et une instruction unique
    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package Linguistic;
     
     
    import ilog.views.sdm.gui.*;
    import javax.lang.model.element.Element;
     
    /**
     *
     * @author JNMartin
     */
    public class ImportSpecification
    {
     
     
        public Element element;
     
        public void ImportFromSpecification()
        {
            IlvSDMDocument doc = createDocument();
        }
     
    }
    Telle quel CreateDocument n'est pas reconnue comme élément de la classe ilog.views.sdm.gui et si on le préfixe avec la classe
    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package Linguistic;
     
     
    import ilog.views.sdm.gui.*;
    import javax.lang.model.element.Element;
     
    /**
     *
     * @author JNMartin
     */
    public class ImportSpecification
    {
     
     
        public Element element;
     
        public void ImportFromSpecification()
        {
            IlvSDMDocument doc = ilog.views.sdm.gui.IlvSDMMdiEditor.createDocument();
        }
    }
    on voit réapparaître la mention static
    Je crois que l'adressage absolue oblige le compilateur à considérer le membre comme static, mais alors que faire pour que la méthode soit reconnue?

    Il faut que j'en vienne à bout.
    ce serait

  2. #2
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut il est utile de passer par un pointeur sur la classe
    Bonjour
    Le code suivant reconnait les méthode de la classe en question
    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 ImportSpecification
    {
     
        IlvSDMMdiEditor DocTr = new IlvSDMMdiEditor();
        public Element element;
        public IlvSDMDocument doc;
     
        public void ImportFromSpecification()
        {
            doc = DocTr.createDocument();
        }
    }
    et effectivement la syntaxe d'adressage absolue fait passer une classe normal en contexte static, et pas l'inverse ( ce qui était inscrit dans ma documentation.
    a bientôt pour de nouvelles aventures, c'est

  3. #3
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par JeanNoel53 Voir le message
    et effectivement la syntaxe d'adressage absolue fait passer une classe normal en contexte static
    C'est plutôt que vous tentez d'appeler une méthode non-static directement de manière static... plutôt que de l'appliquer à un objet.

    Je ne saurais trop vous conseiller la concision dans vos question... présenté comme vous le faites ci-dessus, c'est purement incompréhensible. Abondance de bien de nuit pas, mais abondance de code et d'hypothèses si...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  4. #4
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Comment avancer mieux
    bonjour,
    J'ai mis ce post il y a 4 jours. Je l'ai mis à jour quotidiennement avec mes observations. Je n'ai pas eu de réponse dans l'entre temps et je suis arrivé à une conclusion tout seul. Elle n'est peut être pas tout à fait juste, mais je ne crois pas me tromper de beaucoup et c'était le contraire de ce qui figurait dans mon bouquin de Java.

  5. #5
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par JeanNoel53 Voir le message
    J'ai mis ce post il y a 4 jours.
    Je ne voudrais pas pinailler, mais le post date du 15 et on est le 17...

    Citation Envoyé par JeanNoel53 Voir le message
    Elle n'est peut être pas tout à fait juste, mais je ne crois pas me tromper de beaucoup et c'était le contraire de ce qui figurait dans mon bouquin de Java.
    ooouh, ça, je doute... ce n'est peut-être pas tourné aussi explicitement, sans doute, mais ça doit être expliqué comme ça tout de même. Sinon vous pouvez jeter votre bouquin!

    Ce que vous appelez un "adressage absolu" est en fait un appel de méthode de classe, méthode qui doit donc être déclarée en "static" car ne s'appliquant pas à une instance d'objet de la classe.
    Ce que vous avez tenté de faire avec votre "adressage absolu" est d'appeler une méthode d'instance (devant s'appliquer à un objet) directement sans instancier la classe (donc en faisant un simili appel statique)... d'où l'erreur.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

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

Discussions similaires

  1. Appeler un QThread dans une classe non-QObject ?
    Par ttone dans le forum Multithreading
    Réponses: 13
    Dernier message: 23/06/2008, 15h41
  2. validite d'une static global dans une classe
    Par kacedda dans le forum C++
    Réponses: 24
    Dernier message: 06/01/2008, 13h51
  3. static const dans une classe ?
    Par hpfx dans le forum C++
    Réponses: 7
    Dernier message: 15/08/2007, 15h06
  4. Type DWord dans une classe non managé
    Par julioMEL dans le forum C++/CLI
    Réponses: 1
    Dernier message: 26/04/2007, 20h08
  5. Réponses: 6
    Dernier message: 31/08/2006, 14h54

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