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.
toutes ces lignes sont tagués par NetBeans de non static from static context
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());
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
D'autre part les méthodes qui ne sont pas reconnues par le compilateur sont reconnues dans une autre 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
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); } } }
Je suis donc revenu au code qui marche dans l'autre classe avec une granularité fine dans les import
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.
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); } } }
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
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
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(); } }
on voit réapparaître la mention static
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(); } }
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
Partager