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 :

Not an enclosing class


Sujet :

avec Java

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut Not an enclosing class
    Bonjour

    Voilà j'essaye de compiler ma class "Menu" où se trouve cette partie de 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
    22
    23
    24
     
    public class GestionImprimer implements ActionListener       /**Evènement du sous-item 'internet'**/
        {
            /**
             * Methode pour lancer L'impression
             * @param e ActionEvent
             */
            public void actionPerformed(ActionEvent ev) {
                /**Appel de la fonction "Exec" qui a été précedement déclaré e**/
                PrinterJob pj = PrinterJob.getPrinterJob();
                pj.setPrintable(Page3.this);
                if(pj.printDialog()){
     
                        try 
                        {
                            pj.print();
                        } 
                        catch (Exception PrintException) 
                        {
                        }
                    }
                Variable.out.println("L'impression à été séléctionnée");
            }
        }
    A la base, ce programme s'exécutait dans la class "Page3" et imprimait ce qu'affichait la class "Page3" mais je souhaiterais maintenant l'exécuter à partir de la class "Menu" et qu'il imprime toujours ce qu'affiche la class "Page3".

    Seulement Voilà, le debugger m'affiche ce message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    D:\program files\Projet TPS BNG\guillaume\BNG\src\BNG\Application\Menu.java:282: not an enclosing class: BNG.Application.Page3
                pj.setPrintable(Page3.this);
    Je pense qu'il faut créer une variable dans "Page3" qui fasse le lien entre les deux class mais je ne sait pas comment m'y prendre.
    Si quelqu'un avait une idée, elle serait la bienvenue.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    En fait les classes internes (non-static) sont lié avec une référence de la classe parente, ce qui fait qu'on peut utilisé NomDeLaClasse.this pour récupérer cette référence et l'utiliser.

    Plus d'info : Quels sont les différents types de classes internes (nested classes) ?


    En transformant cette classe en classe standard, tu perds ce lien et du dois donc le recréer :

    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
    public class GestionImprimer implements ActionListener       /**Evènement du sous-item 'internet'**/
        {
            private final Page3 page;
     
            GestionImprimer (Page3 page) {
                    this.page = page;
            }
     
            /**
             * Methode pour lancer L'impression
             * @param e ActionEvent
             */
            public void actionPerformed(ActionEvent ev) {
                /**Appel de la fonction "Exec" qui a été précedement déclaré e**/
                PrinterJob pj = PrinterJob.getPrinterJob();
                pj.setPrintable(this.page);
                if(pj.printDialog()){
     
                        try 
                        {
                            pj.print();
                        } 
                        catch (Exception PrintException) 
                        {
                        }
                    }
                Variable.out.println("L'impression à été séléctionnée");
            }
        }

    a++

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    Merci adiGuba de ton aide

    J'ai inséré la partie de code que tu as rajouté.Seulement quand je compile le debugger m'affiche une nouvelle erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    D:\program files\Projet TPS BNG\guillaume\BNG\src\BNG\Application\Menu.java:142: cannot find symbol
    symbol  : constructor GestionImprimer()
    location: class BNG.Application.Menu.GestionImprimer
            imprimer.addActionListener(new GestionImprimer());      /**De même pour le sous-item 'imprimer'**/
    1 error
    et il me surligne cette partie de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
          fichier.add(imprimer);                                              
          imprimer.addActionListener(new GestionImprimer());              
          fichier.addSeparator();
    qui permet d'exécuter le programme qui se trouve dans le "public void actionPerformed(ActionEvent ev)" qua

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    qui permet d'exécuter le programme qui se trouve dans le "public void actionPerformed(ActionEvent ev)" quand on clique sur le sous-item "imprimer"

    merci d'avance

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Ben comme on a rajouté un paramètre au constructeur, il faut le passer lorsqu'on appelle le constructeur.

    Bref si ton code est bien dans la classe Page3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new GestionImprimer(this)
    a++

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    non la dernière partie de code que je t'ai envoyé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          fichier.add(imprimer);                                              
          imprimer.addActionListener(new GestionImprimer());              
          fichier.addSeparator();
    appartient à la même classe que le premier programme envoyé

    Donc est-ce que je doit toujours insérer this dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    imprimer.addActionListener(new GestionImprimer());
    ou est-ce que je doit insérer l'attribut page à la place?

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Il faut que tu lui passes la référence vers ton objet Page3...

    a++

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    Excuse moi de t'embêté de nouveau mais je suis encore débutant en JAVA et je n'ai pas très bien saisis la signification de ta dernière phrase. Est ce que tu pourrais me dire concrètement ce que ça implique dans le code.

    merci

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Tu as un objet Page3 que tu utilises dans GestionImprimer, il faut donc lui passer en paramètre du constructeur.

    Sinon tu remets GestionImprimer en classe interne de Page3 pour que ce soit automatique.

    a++

  10. #10
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    Bon au final, j'ai garder la class interne "GestionImprimer" dans "public class GestionImprimer implements ActionListener" et j'ai insérer "page" dans le constructeur "GestionImprimer" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fichier.add(imprimer);                                          imprimer.addActionListener(new GestionImprimer(page));              fichier.addSeparator();
    et la compilation du projet se passe bien. L'application graphique s'affiche puis quand je clique sur le sous-item "imprimer", la fenêtre de dialogue d'impression apparaît, je clique alors sur le bouton imprimer et là apparaît dans la zone de notification la petite incône de l'imprimante qui confirme l'impression. Seulement juste après elle disparait et rien ne se passe.

    Est ce que tu pense que ca vient du programme ou que c'est un problème de réseau avec l'imprimante

Discussions similaires

  1. Could not find main class
    Par firgon dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 21/10/2008, 15h48
  2. Source not found for class ...
    Par singleProject dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 06/08/2008, 09h19
  3. Réponses: 7
    Dernier message: 17/03/2008, 08h35
  4. JVM : Could Not Find Main Class
    Par Mythrandil dans le forum Langage
    Réponses: 6
    Dernier message: 06/09/2007, 12h13
  5. JDIC : Could not find main class
    Par seiryujay dans le forum API standards et tierces
    Réponses: 32
    Dernier message: 08/02/2006, 16h44

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