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

avec Java Discussion :

Problème "No enclosing instance of the type is accessible in scope"


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut Problème "No enclosing instance of the type is accessible in scope"
    Bonjour,

    Je débute en Java et je suis donc désolé de cette question mais voilà :

    J'ai une classe Application qui appelle plusieurs JPanel suivant les clics dans le menu :

    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
     
    public class Application implements ActionListener {
     
    	AppWindow appWin = new AppWindow();
    	MainPanel mainPane = new MainPanel();
    	ControlEditor editPane = new ControlEditor();
    	String LogText="";
     
    	public JMenuBar getMenu() {
    		...
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		...
    	}
     
    	public static void main(String[] args) {
    		SwingUtilities.invokeLater(new Runnable(){
     
    			public void run(){
    				Application app = new Application();
     
    				app.appWin.setVisible(true);
    				app.appWin.setJMenuBar(app.getMenu());
    				app.appWin.setContentPane(app.mainPane);
     
     
    			}
    		});
    	}
    }
    Le problème c'est que quand j'implémente les classes des différents JPanel, je ne peut accéder à la variable LogText. Je pense qu'il doit bien y avoir un moyen mais je ne trouve pas...

    Voici le code d'un JPanel (j'ai volontairement simplifié le 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
    21
     
    public class MainPanel extends JPanel implements ActionListener {
     
    	public void actionPerformed(ActionEvent e) {
    		...
    	}
     
    	public MainPanel() {
     
    		this.setLayout(null);
     
    		JLabel title = new JLabel("Configuration des fichiers",JLabel.CENTER);
    		title.setFont(title.getFont().deriveFont(new Float(20)));
    		title.setBounds(10, 10, 520, 30);
     
    		this.add(title);
     
    		Application.this.LogText += "";
     
    	}
    }
    Quelqu'un a une idée ?
    D'avance Merci !!

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Hello,

    Essentiellement, tu cherches à faire en sorte que LogText soit une variable globale dans laquelle toute ton application peut écrire à tout moment et de n'importe où.

    Pour cela, il faudrait qu'elle soit public static :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static String logText = "";
    Et pour y accéder, ce sera Application.logText :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.logText += "bidule";
    Il est possible de faire ce genre de choses en Java. Mais c'est à éviter.

    - Le logging doit être géré de manière moins naïve. En utilisant une bibliothèque spécialisée comme log4j par exemple.
    Là, en vrac on peut citer comme problèmes, de mauvaises performances, une mauvaise résistance au multithreading, un manque de côté pratique (séparer les lignes est trop compliqué, tout comme ajouter un timestamp à chaque log,) et l'absence d'enregistrement dans un fichier.

    - Seules les constantes et quelques autre cas devraient être globales.
    Le logging est, en général, un tel autre cas.
    Mais le problème des accès globaux, c'est qu'on ne peut pas, comme avec les objets normaux, en confier un à un objet et un autre à un autre objet : c'est tous le même.
    En général, on se dit "ouais mais je m'en fous, j'en veux qu'un seul." Oui, jusqu'au jour où ce n'est plus le cas, et qu'il est trop tard parce que tout le code est basé dessus.
    La bonne approche est de ne jamais faire de global, en prévision du jour où on aura besoin d'en avoir plus d'un. Ça veut dire qu'on ne doit jamais avoir quelque chose "accessible de partout, tout le temps." Quand quelque chose doit pouvoir être accédé, il faut qu'il soit connu de l'objet qui s'en sert, en étant en général passé dans son constructeur, ou en paramètre d'une méthode.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Re et merci de ta réponse !

    Alors pour Log4j je vais voir (j'ai déjà ouvert le tuto de jmdoudoux mais comment dire... c'est long... )

    Sinon, plus généralement, j'ai d'autres variables que je pensais mettre en global juste pour qu'elles soient utilisables par d'autres classes... utilisables mais pas modifiables (c'est juste des gros tableaux dont je me sert).

    Dois-je les garder en "public static" ou y a-t-il un autre moyen ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par Ludix_ Voir le message
    Alors pour Log4j je vais voir (j'ai déjà ouvert le tuto de jmdoudoux mais comment dire... c'est long... )
    Pour un début, l'infâme System.out.println() sera toujours mieux que concaténer dans une String.

    Citation Envoyé par Ludix_ Voir le message
    Sinon, plus généralement, j'ai d'autres variables que je pensais mettre en global juste pour qu'elles soient utilisables par d'autres classes... utilisables mais pas modifiables (c'est juste des gros tableaux dont je me sert).

    Dois-je les garder en "public static" ou y a-t-il un autre moyen ?
    Tout dépend si ces données sont gravées dans le marbre ou si elles peuvent changer suivant les utilisations. Autrement dit, jusqu'à quel point es-tu certain que ces tableaux, tu en as vraiment un seul de chaque, et ça changera jamais.

    Si oui, et si c'est fait pour être lu mais pas modifié, il n'y a pas de problème pour le garder en accès global. À la limite si c'est des tableaux on peut craindre qu'un code malveillant ou pas malin vienne modifier ces tableaux... Mais bon il faut pas intégrer ton code avec du code qui ferait une chose pareille, quoi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    OK merci pour ces réponses c'est beaucoup plus clair !

    Je crois que je vais garder mes tableaux en global donc !

    Merci !!

+ 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. Réponses: 1
    Dernier message: 21/12/2005, 19h08
  3. Réponses: 1
    Dernier message: 06/12/2005, 09h22
  4. Réponses: 8
    Dernier message: 15/11/2005, 18h06
  5. [Oracle 9ir2]problème de recréation d'instance
    Par seal dans le forum Oracle
    Réponses: 3
    Dernier message: 02/11/2005, 12h02

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