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 :

Instancier une fenetre comme Singleton


Sujet :

avec Java

  1. #1
    Membre confirmé Avatar de zarohn
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 148
    Par défaut Instancier une fenetre comme Singleton
    Bonjour.

    Alors voila j'ai un projet java fait avec netbeans qui contient deux fenêtres.
    Je cherche a instancier l'une d'elle en tant que Singleton (une seule instance de classe possible).

    Je fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class MaClasse extends java.awt.Frame {
     
        private static MaClasse instance = null;
     
        private MaClasse() {
     
        }
     
        public static MaClasse newInstance() {
            if (instance == null) {instance = new MaClasse();}
            initComponents();
            return instance;
        }
    }
    Que j'instancie comme ça depuis l'autre fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void btNouveauActionPerformed(java.awt.event.ActionEvent evt) {   
          MaClasse window = MaClasse.newInstance();
          window.setVisible(true);
    }
    J'obtiens une erreur sur la ligne "initComponents();" qui est une instruction générée automatiquement par netbeans (pour mettre en forme la fenêtre) :

    non-static method initComponents() cannot be referenced from a static context
    Et si j'essaye d'enlever le "static", l'erreur est cette fois à l'appel sur la ligne "MaClasse window = MaClasse.newInstance();" et est :

    non-static method newInstance() cannot be referenced from a static context
    Si je met en commentaire l'instruction "initComponents();" je vois que le singleton marche bien puisque quand je clique plusieurs fois sur le bouton une seule fenêtre s'affiche. Mais j'ai besoin de cette instruction pour construire la fenêtre ...

    Bref comment faire svp ?
    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La méthode newInstance(), étant static, n'est associée à aucun objet instancié.
    Il n'est donc pas possible d'appeler initComponent().
    En revanche, c'est sur instance qu'on peut invoquer cette méthode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static MaClasse newInstance() {
            if (instance == null) {instance = new MaClasse();}
            instance.initComponents();
            return instance;
        }

  3. #3
    Membre confirmé Avatar de zarohn
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 148
    Par défaut
    C'était bien ça ...
    Merci beaucoup pour l'aide ça m'a débloqué !!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/05/2009, 00h17
  2. [SWING] Glisser/Déposer une fenetre comme sur Eclipse
    Par publicStaticVoidMain dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 20/04/2009, 17h13
  3. Code qui permet d'ouvrir une fenetre browser comme pour un input file
    Par Jim_Nastiq dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/06/2007, 15h11
  4. Réponses: 6
    Dernier message: 06/04/2007, 21h20
  5. image comme arrière-plan dans une fenetre?
    Par afrikha dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 08/10/2005, 20h22

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